2013-08-21 13 views
5

Używam najnowszej wersji NHibernate (3.3.1.4000) z NuGet w projekcie docelowym .Net 4 w Visual Web Developer 2010 Express.NHibernate QueryOver Alias ​​Issue

Kiedy próbuję podążać za przykładami, które widziałem do definiowania aliasów, otrzymuję wyjątek podczas ustawiania ich za pomocą lambdas (patrz zrzut ekranu).

Shows error 'Cannot convert lambda expression to type 'string'...

Jak widać Dostaję błąd Cannot convert lambda expression to type 'string' because it is not a delegate type.

mam odniesienia do nazw LINQ w górnej części mojego kodu:

using System.Linq; 
using System.Linq.Expressions; 

jakieś przemyślenia na temat tego, co może być przyczyną problemu?

Odpowiedz

8

Aby użyć zmiennej jak role w wyrażeniu, trzeba go najpierw zdefiniować, tak jak ...

Role roleAlias = null; // <-- these two lines are missing from your code. 
Person personAlias = null; 

var x = session.QueryOver<Role>(() => roleAlias) 
    .JoinAlias(r => r.People,() => personAlias) 
    // ... 

ISession.QueryOver<T>(...) ma cztery przeciążeń:

  • .QueryOver<T>()
  • .QueryOver<T>(Expression<Func<T>> alias)
  • .QueryOver<T>(string entityName)
  • .QueryOver<T>(string entityName, Expression<Func<T>> alias)

Najwyraźniej dlatego, że nie może dowiedzieć się, co role jest, to zakładając, że próbujesz użyć przeciążenie .QueryOver<T>(string entityName), stąd „nie można przekształcić ... wpisać«string»” komunikat o błędzie.

+0

Dziękuję, to wydaje się być poprawna odpowiedź. Myślałem, że coś jeszcze się dzieje. Nie zdawałem sobie sprawy, że muszę tworzyć zmienne, aby używać ich jako aliasów. Ale po przeczytaniu odpowiedzi wróciłem do dokumentów i na pewno jest tam w 16.5. Aliasy (http://nhforge.org/doc/nh/en/index.html#queryqueryover-aliases). – Sam

Powiązane problemy