2015-06-05 2 views
9

В Linq to Entity, что делает .AsExpandable() именно так? Где и зачем его использовать? Включает ли он все связанные объекты в запрос для ленивой загрузки?.AsExpandable в Linq to Entity

+2

'AsExpandable' не является встроенным функционалом Ling. Если вы говорите о методе расширения из [LinqKit] (http://www.albahari.com/nutshell/linqkit.aspx), прочитайте этот документ, а также [блог] (http://tomasp.net /blog/linq-expand.aspx/), на котором была основана. –

+0

Спасибо тонну. Это помогло. –

ответ

9

«обработка запросов трубопровод Entity Framework не может обрабатывать Призыв выражений, поэтому вам нужно вызвать AsExpandable на первый объект в запросе. Позвонив AsExpandable, активация экспрессии класса посетителя LINQKit, который заменяет Призыв выражение с более простыми конструкциями что Entity Framework может понять ». ~ Josef Albahary

Для получения более подробной информации я бы рекомендовал читать из author of LinqPad

1

Там нет неявного преобразования из группы методов к выражению (из соответствующего типа делегата). Существует неявное преобразование из группы методов в делегат соответствующей подписи. Поэтому соответствует только перегрузка IEnumerable.

Конечно, это не значит, что вам нужно использовать лямбду. Просто напишите:

ctx.Set(). AsExpandable(). Where (ByName); Поскольку вы передаете выражение (ByName, в конце концов, уже есть выражение, которое именно то, что требуется Queryable.Where), это будет оцениваться как запрос, а не в linq для объектов.