2012-04-05 2 views
5

В основе перегрузки струнной Include мы указываем, чтобы включать в себя коллекцию, а затем ссылочный на один уровень вниз, просто указав соответствующие навигационные свойства в правильном порядке:Включают с помощью лямбда-выражения

query.Include("Level1Collection.Level2Reference"); 

Но почему при использовании перегрузки из Include, которая использует лямбда-выражения, мы должны также использовать Select заявление в состоянии указать выше запрос:

query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference)). 

Почему бы не следующая работа:

query.Include.(e => e.Level1Collection.Level2Reference) 

спасибо

ответ

7

Поскольку компилятор не распознает, что контекст изменился смысл свойства коллекции от того, коллекции, чтобы быть дублером для объектов в коллекции. И поскольку компилятор не изменяется в зависимости от контекста, он также не выполняет intellisense.

Когда вы подаете Включить строку заявление, он знает, что он должен использовать отражение, чтобы знать, какие свойства включать в любом случае, и нет проверки типов на компиляции. Основной метод знает, что когда он видит точку после свойства коллекции в строке, она должна анализировать свойства объектов в коллекции для следующего ссылочного свойства, а не самой коллекции (в данном случае это «Level2Reference»).

Или другими словами: это волшебство. :)

+0

делает sense.Much оценили – user702769

Смежные вопросы