包括使用Lambda表达式

use*_*769 5 linq lambda linq-to-entities entity-framework

在基于字符串的重载中,Include我们指定包含一个集合,然后通过以正确的顺序指定相关的导航属性来向下一个级别:

query.Include("Level1Collection.Level2Reference");
Run Code Online (Sandbox Code Playgroud)

但是为什么当使用Include使用lambda表达式的重载时,我们还必须使用一个Select语句来指定上面的查询:

query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference)).
Run Code Online (Sandbox Code Playgroud)

以下为什么不工作:

query.Include.(e => e.Level1Collection.Level2Reference)
Run Code Online (Sandbox Code Playgroud)

谢谢

Jac*_*itt 7

因为编译器无法识别上下文已将集合属性的含义从集合更改为集合中对象的替身.由于编译器不会根据上下文进行更改,因此intellisense也不会.

当你提供包含一个字符串语句时,它知道它必须使用反射来知道要包含哪些属性,并且在编译时没有类型检查.底层方法知道当它在字符串中的集合属性之后看到一个点时,它应该解析集合中对象的属性以用于下一个引用的属性而不是集合本身(在这种情况下为"Level2Reference").

换句话说:它是神奇的.:)