EF 3.x 中最简单的分组依据失败,并显示“不支持客户端分组依据”

2024-01-06

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

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

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

当我运行此命令时,我收到 System.InvalidOperationException,“不支持客户端 GroupBy”。

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

From https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/writing-changes#linq-queries-are-no-longer-evaluated-on-the-客户 https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#linq-queries-are-no-longer-evaluated-on-the-client:

旧行为

在 3.0 之前,当 EF Core 无法转换属于 对 SQL 或参数的查询,它会自动评估 客户端上的表达式。默认情况下,客户评价为 潜在昂贵的表达式只会触发警告。

新行为

从 3.0 开始,EF Core 只允许顶层表达式 要评估的投影(查询中的最后一个 Select() 调用) 客户端。当查询的任何其他部分中的表达式不能 转换为 SQL 或参数时,会引发异常。

这是否意味着在以前的版本中,ALLGroupBy 子句在客户端上进行评估?

另外,为什么我的示例中的 GroupBy 不能在 SQL 中计算?我的示例的 GroupBy 为何不是顶级投影?

再次,我的主要问题:这是一个错误还是预期的行为?


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

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

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

另外,为什么我的示例中的 GroupBy 不能在 SQL 中计算?我的示例的 GroupBy 为何不是顶级投影?

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

再次,我的主要问题:这是一个错误还是预期的行为?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF 3.x 中最简单的分组依据失败,并显示“不支持客户端分组依据” 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 重载<<的返回值

    include
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐