在Include
的基于字符串的重载中,我们指定包含一个集合,然后通过以正确的顺序指定相关的导航属性来向下一个级别:
query.Include("Level1Collection.Level2Reference");
但是为什么当使用Include
的重载使用lambda表达式时,我们还必须使用Select
语句来指定上述查询:
query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference)).
为什么不能做以下工作:
query.Include.(e => e.Level1Collection.Level2Reference)
谢谢
答案 0 :(得分:7)
因为编译器无法识别上下文已将集合属性的含义从集合更改为集合中对象的替身。由于编译器不会根据上下文进行更改,因此智能感知器也不会发生变化。
当你输入Include一个字符串语句时,它知道它必须使用反射来知道要包含哪些属性,并且在编译时没有类型检查。底层方法知道当它在字符串中的集合属性之后看到一个点时,它应该解析集合中对象的属性,而不是集合本身(在这种情况下为“Level2Reference”)。
或者换句话说:它是神奇的。 :)