在基于字符串的重载中Include
我们指定包含一个集合,然后简单地通过以正确的顺序指定相关导航属性来包含下一层的引用:
query.Include("Level1Collection.Level2Reference");
但是为什么当使用重载时Include
使用 lambda 表达式,我们还必须使用Select
语句能够指定上述查询:
query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference)).
为什么以下不起作用:
query.Include.(e => e.Level1Collection.Level2Reference)
谢谢
因为编译器无法识别上下文已将集合属性的含义从集合更改为集合中对象的替代。由于编译器不会根据上下文而改变,因此智能感知也不会改变。
当您提供 Include 字符串语句时,它知道必须使用反射来知道要包含哪些属性,并且编译时不会进行类型检查。底层方法知道,当它在字符串中的集合属性后面看到一个点时,它应该解析集合中对象的属性以获取下一个引用的属性,而不是集合本身(在本例中为“Level2Reference”)。
或者换句话说:这就是魔法。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)