【发布时间】:2021-06-24 21:59:04
【问题描述】:
我不明白为什么这不能翻译。这似乎正是here 描述的用例。
LINQ 表达式
DbSet<A>()
.GroupJoin(
inner: DbSet<B>(),
outerKeySelector: a => a.AId,
innerKeySelector: b => b.AId,
resultSelector: (a, bs) => new {
a = a,
bs = bs
})
产生错误:
无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
产生异常的 LINQ 代码是
from a in ctx.As
join b in ctx.Bs on a.aId equals b.aId into bs
select new {A = a, Bs = bs.ToList()};
编辑:也许我误解了文档,这是一个不翻译的例子。
执行类似以下示例的查询会生成 Blog 和 IEnumerable 的结果。由于数据库(尤其是关系数据库)无法表示客户端对象的集合,因此 GroupJoin 在许多情况下不会转换为服务器。它要求您从服务器获取所有数据以在没有特殊选择器的情况下进行 GroupJoin(下面的第一个查询)。但是如果选择器限制了被选择的数据,那么从服务器获取所有数据可能会导致性能问题(下面的第二个查询)。这就是 EF Core 不翻译 GroupJoin 的原因。
但后来我的问题变成了:如何在不需要导航属性的情况下实现我正在寻找的结果?
【问题讨论】: