5

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

query.Include("Level1Collection.Level2Reference");

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

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

为什么以下工作不起作用:

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

谢谢你

4

1 回答 1

7

因为编译器没有识别出上下文已经将集合属性的含义从集合更改为集合中对象的替代。而且由于编译器不会根据上下文进行更改,智能感知也不会。

当您输入 Include 一个字符串语句时,它知道它必须使用反射来知道无论如何要包含哪些属性,并且编译时没有类型检查。底层方法知道,当它在字符串中的集合属性后面看到一个点时,它应该解析集合中对象的属性以获取下一个引用的属性,而不是集合本身(在本例中为“Level2Reference”)。

或者换句话说:这很神奇。:)

于 2012-04-05T20:28:07.213 回答