2015-06-05 13 views
9

Dokładnie w Linq do Entity, co robi .AsExpandable()? Gdzie i dlaczego go używać? Czy zawiera wszystkie powiązane podmioty do zapytania o leniwy ładowanie?. Wyjątek w Linq dla Entity

+2

'AsExpandable' nie jest wbudowanym funciotn Ling. Jeśli mówisz o metodzie rozszerzenia z [LinqKit] (http://www.albahari.com/nutshell/linqkit.aspx), przeczytaj dokumentację, a także [blog] (http://tomasp.net /blog/linq-expand.aspx/), na którym się opierał. –

+0

Dzięki za tonę. Pomogło. –

Odpowiedz

9

„przetwarzanie zapytań rurociąg Entity Framework nie obsługuje wyrażeń wywołaniu, dlatego trzeba zadzwonić AsExpandable pierwszego obiektu w zapytaniu. Wywołując AsExpandable aktywuje klasę odwiedzających LINQKit za wyrażenie, które zastępuje wyrażeń procedury wywołania z prostszych konstrukcji że Entity Framework może to zrozumieć. " ~ Josef Albahary

Więcej szczegółów Polecam odczytać z author of LinqPad

1

Nie ma niejawna konwersja z grupy metoda na wyrażenie (od odpowiedniego typu delegata). Istnieje niejawna konwersja z grupy metod do delegata zgodnego podpisu. Dlatego pasuje tylko przeciążenie IEnumerable.

Oczywiście, nie oznacza to, że trzeba użyć lambda. Po prostu napisz:

ctx.Set(). AsExpandable(). Where (ByName); Ponieważ przekazujesz wyrażenie (ByName jest, mimo wszystko, Wyrażeniem, które jest dokładnie tym, czego wymaga Queryable.Where), zostanie ono ocenione jako zapytanie, a nie w linq do obiektów.

Powiązane problemy