gpt4 book ai didi

entity-framework-core - `groupjoin` 的查询无法翻译,尽管它被证明是受支持的

转载 作者:行者123 更新时间:2023-12-04 16:38:02 26 4
gpt4 key购买 nike

我不明白为什么这不翻译。这似乎正是描述的用例 here .
LINQ 表达式

DbSet<A>()
.GroupJoin(
inner: DbSet<B>(),
outerKeySelector: a => a.AId,
innerKeySelector: b => b.AId,
resultSelector: (a, bs) => new {
a = a,
bs = bs
})
产生错误:

could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.


产生异常的 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()};
编辑:也许我误解了文档,这是一个不翻译的例子。

Executing a query like the following example generates a result of Blog & IEnumerable. Since databases (especially relational databases) don't have a way to represent a collection of client-side objects, GroupJoin doesn't translate to the server in many cases. It requires you to get all of the data from the server to do GroupJoin without a special selector (first query below). But if the selector is limiting data being selected then fetching all of the data from the server may cause performance issues (second query below). That's why EF Core doesn't translate GroupJoin.


但后来我的问题变成了: 如何在不需要导航属性的情况下实现我正在寻找的结果?

最佳答案

链接文档中的解释只是遵循 EF Core 团队的愿景并且很荒谬,因为它当然可以轻松翻译 - 我在这里与团队进行了长时间的讨论 Query with GroupBy or GroupJoin throws exception #17068并在此处继续 Query: Support GroupJoin when it is final query operator #19930 ,试图说服他们为什么应该支持它,无论争论如何都没有运气。
重点是(这是当前的解决方法)它可以像相关子查询( SelectMany )一样被处理,它被正确地翻译和处理(即使查询结果形状没有 SQL 等效项。
无论如何,当前状态是“需要设计”(无论这意味着什么),解决方法是将连接替换为相关子查询(这是 EF Core 在查询转换期间“扩展”集合导航属性时在内部使用的内容)。
在你的情况下,更换

join b in ctx.Bs on a.aId equals b.aId into bs
let bs = ctx.Bs.Where(b => a.aId == b.aId)

但是,我强烈建议添加和使用导航属性。不知道为什么你“不能使用”它们,在不投影实体的 LINQ to Entities 中,它们只为关系提供元数据,从而自动生成必要的连接。通过不定义它们,您只会给自己带来不必要的限制(除了 EF Core 限制/错误之外)。一般来说,EF Core 在使用导航属性而不是手动连接时效果更好并支持更多功能。

关于entity-framework-core - `groupjoin` 的查询无法翻译,尽管它被证明是受支持的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66844615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com