.在Linq中扩展到实体



在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对象。

相关内容

  • 没有找到相关文章

最新更新