Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF 3.x中最简单的分组失败,带有;不支持客户端GroupBy“;_C#_.net Core_Ef Core 3.0_Entity Framework Core 3.0 - Fatal编程技术网

C# EF 3.x中最简单的分组失败,带有;不支持客户端GroupBy“;

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

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

当我搜索时,我找到了这个问题的参考文献,但我没有看到任何关于为什么会发生这种情况的明确答案,也没有看到它是一个将被修复的bug还是预期的行为。这和看起来一样简单——BatchRequest表/实体有一个名为BatchId的整数列/属性:

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的整数。由于查询没有使用任何其他字段,我不确定还有哪些信息会有帮助。