Включете използването на ламбда израз

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

query.Include("Level1Collection.Level2Reference");

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

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

Защо следното не работи:

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

Благодаря ти


person user702769    schedule 05.04.2012    source източник


Отговори (1)


Тъй като компилаторът не разпознава, че контекстът е променил значението на свойството на колекцията от това, че е колекция, на това, че е заместник за обекти в колекцията. И тъй като компилаторът не се променя въз основа на контекста, нито intellisense.

Когато захранвате Include string оператор, той знае, че трябва да използва отражение, за да знае какви свойства да включи така или иначе и няма проверка на типа при компилиране. Базовият метод знае, че когато види точка след свойство на колекция в низа, трябва да анализира свойствата на обектите в колекцията за следващото препратено свойство, а не самата колекция („Level2Reference“ в този случай).

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

person Jacob Proffitt    schedule 05.04.2012