gpt4 book ai didi

c# - EF 3.x 中最简单的 Group By 失败, "Client side GroupBy is not supported"

转载 作者:行者123 更新时间:2023-12-04 04:17:46 25 4
gpt4 key购买 nike

目前正在使用 EF Core 3.1.1 版进行测试。

当我搜索时,我找到了对这个问题的引用,但我没有看到任何关于为什么会发生这种情况的明确答案,以及它是一个将被修复的错误还是它是否是预期的行为。这就像看起来一样简单——BatchRequest 表/实体有一个名为 BatchId 的整数列/属性:

var batchRequestGroups = context.BatchRequests.GroupBy(br => br.BatchId).ToList();

当我运行它时,我得到一个 System.InvalidOperationException,“不支持客户端 GroupBy。”

因此,根据我在网上找到的解释,EF Core 3.x 似乎不再允许客户端 GroupBys,除非在顶级投影中。

来自 https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#linq-queries-are-no-longer-evaluated-on-the-client :

Old behavior

Before 3.0, when EF Core couldn't convert an expression that was part of a query to either SQL or a parameter, it automatically evaluated the expression on the client. By default, client evaluation of potentially expensive expressions only triggered a warning.

New behavior

Starting with 3.0, EF Core only allows expressions in the top-level projection (the last Select() call in the query) to be evaluated on the client. When expressions in any other part of the query can't be converted to either SQL or a parameter, an exception is thrown.



这是否意味着在以前的版本中,所有 GroupBy 子句都是在客户端上评估的?

另外,为什么我的示例中的 GroupBy 不能在 SQL 中进行评估?我的示例的 GroupBy 如何不是顶级投影?

同样,我的主要问题是:这是错误还是预期行为?

最佳答案

从 EF 3.0 开始,对查询的客户端评估被视为错误,这与将其视为警告的先前版本不同。

Does this mean that in previous versions, ALL GroupBy clauses were evaluated on the client?



不。并非所有 group by 语句都在客户端进行评估。这取决于 EF 核心是否能够将 LINQ 转换为支持的 SQL 语句。

Also, why can't the GroupBy in my example be evaluated in SQL? And how is my example's GroupBy not the top-level projection?



我的猜测是您的实体包含其他关系和 EF 核心加载和按指定属性分组,这在 SQL 中无法完成。

Again, my main question: is this a bug or expected behavior?



这显然不是一个错误。这是预期的行为。

关于c# - EF 3.x 中最简单的 Group By 失败, "Client side GroupBy is not supported",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60213529/

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