2012-04-05 58 views
5

Include基于字符串的过载我们指定包括集合,然后引用一个简单地通过正确的顺序指定有关导航性能下降水平:包括使用Lambda表达式

query.Include("Level1Collection.Level2Reference"); 

但是,为什么使用过载时,的使用lambda表达式Include,必须同时我们也使用Select语句能够指定上述查询:

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

为什么不以下工作:

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

谢谢

回答

7

因为编译器无法识别的情况下改变了集合属性的含义从一个集合是一个替身集合中的对象。而且,由于编译器不会改变根据上下文,同样没有智能感知。

当你喂包括串声明,它知道它必须使用反射来了解性能,反正有和没有类型检查的编译。基本的方法都知道,当它的字符串在集合属性后看到一个点,它应该在集合中解析对象的属性下一个引用的属性,而不是集合本身(在这种情况下,“Level2Reference”)。

或者换句话说:它的魔力。 :)

+0

使得sense.Much理解 – user702769 2012-04-05 20:39:04