.在Linq to Entity中可扩展

Jit*_*pta 15 linq lambda entity-framework

在Linq to Entity中,究竟做.AsExpandable()了什么?在哪里以及为何使用它?它是否包含所有相关实体进入延迟加载的查询?

Yur*_*uri 12

"实体框架的查询处理管道无法处理调用表达式,这就是您需要在查询中的第一个对象上调用AsExpandable的原因.通过调用AsExpandable,您可以激活LINQKit的表达式访问者类,它使用Entity Framework可以理解的更简单的结构替换调用表达式. " 〜约瑟夫·阿尔巴哈里

有关详细信息,我建议您阅读LinqPad作者

  • 这在今天的 EF Core 中仍然适用吗? (2认同)
  • @Gerry EF 查询翻译的工作原理是遍历查询表达式树并根据一组硬编码的 SQL 翻译查找每个方法,这些翻译主要是 LINQ 的子集。因此,EF 不知道 LinqKit `.Invoke()` 方法的实际含义,也不知道如何翻译它。`.AsExpandable()`(和 `.Expand()`)的作用是遍历表达式树,并在 EF 到达它之前将 `.Invoke()` 的任何实例与其调用的实际表达式树交换。这样,EF 只能看到一个没有 `.Invoke()` 的“普通”表达式树。 (2认同)