在Linq到实体,.AsExpandable()
到底做什么?在哪里以及为什么使用它?是否将所有相关的实体包含到延迟加载的查询中?
实体框架的查询处理管道不能处理调用表达式,这就是为什么你需要在查询中的第一个对象上调用AsExpandable。通过调用AsExpandable,您激活了LINQKit的表达式访问器类,它用实体框架可以理解的更简单的构造代替调用表达式。
- Josef Albahari
要了解更多细节,我建议阅读LinqPad的作者
- 没有从方法组到
Expression<TDelegate>
(对应的委托类型TDelegate
)的隐式转换。 但是有一个从方法组到匹配签名的委托的隐式转换。因此,只有
IEnumerable
过载匹配。当然,这并不是说您需要使用lambda。就这样写:
ctx.Set<Person>().AsExpandable().Where(ByName);
由于您正在传递一个表达式(毕竟ByName
已经是Expression<Person, bool>
了,这正是Queryable.Where<Person>
所需要的),这将作为查询计算,而不是linq对象。