C# EF 3.x中最简单的分组失败,带有;不支持客户端GroupBy“;
目前正在使用EF Core版本3.1.1进行测试 当我搜索时,我找到了这个问题的参考文献,但我没有看到任何关于为什么会发生这种情况的明确答案,也没有看到它是一个将被修复的bug还是预期的行为。这和看起来一样简单——BatchRequest表/实体有一个名为BatchId的整数列/属性:C# EF 3.x中最简单的分组失败,带有;不支持客户端GroupBy“;,c#,.net-core,ef-core-3.0,entity-framework-core-3.0,C#,.net Core,Ef Core 3.0,Entity Framework Core 3.0,目前正在使用EF Core版本3.1.1进行测试 当我搜索时,我找到了这个问题的参考文献,但我没有看到任何关于为什么会发生这种情况的明确答案,也没有看到它是一个将被修复的bug还是预期的行为。这和看起来一样简单——BatchRequest表/实体有一个名为BatchId的整数列/属性: var batchRequestGroups = context.BatchRequests.GroupBy(br => br.BatchId).ToList(); 当我运行此命令时,我得到一个Syste
var batchRequestGroups = context.BatchRequests.GroupBy(br => br.BatchId).ToList();
当我运行此命令时,我得到一个System.InvalidOperationException,“不支持客户端GroupBy。”
因此,根据我在网上找到的解释,EF Core 3.x似乎不再允许客户端GroupBys,除非在顶层投影中
发件人:
旧行为
在3.0之前,当EF Core无法转换作为其一部分的表达式时
对于SQL或参数的查询,它会自动计算
客户端上的表达式。默认情况下,客户端对
潜在昂贵的表达式只会触发警告
新行为
从3.0开始,EF Core只允许顶级表达式
要对其求值的投影(查询中的最后一个Select()调用)
客户。当查询的任何其他部分中的表达式无法
转换为SQL或参数后,将引发异常
这是否意味着在以前的版本中,所有GroupBy子句都是在客户机上评估的
另外,为什么我的示例中的GroupBy不能用SQL进行计算?我的例子中的GroupBy怎么不是顶级投影
同样,我的主要问题是:这是一个bug还是预期的行为?从EF 3.0开始,客户端对查询的评估被视为一个错误,与以前的版本不同,它被视为一个警告 这是否意味着在以前的版本中,所有GroupBy子句都是在客户机上评估的 否。并非所有group by语句都在客户端进行评估。这取决于EF核心是否能够将LINQ转换为受支持的SQL语句 另外,为什么我的示例中的GroupBy不能用SQL进行计算?我的例子中的GroupBy怎么不是顶级投影 我猜您的实体包含其他关系以及按指定属性加载和分组的EF核心,这在SQL中是无法完成的 同样,我的主要问题是:这是一个bug还是预期的行为
显然这不是一只虫子。这是预期的行为。能否共享您的
BatchRequests
实体模型?如问题中所述,它是一个表/实体,上面有许多列,其中一列是名为BatchId的整数。由于查询没有使用任何其他字段,我不确定还有哪些信息会有帮助。