GroupBy 表达式翻译失败

2024-04-10

//Model
public class Application
{
    [Key]
    public int ApplicationId { get; set; }
    public DateTime CreatedAt { get; set; }
    public DateTime ConfirmedDate { get; set; }
    public DateTime IssuedDate { get; set; }
    public int? AddedByUserId { get; set; }
    public virtual User AddedByUser { get; set; }
    public int? UpdatedByUserId { get; set; }
    public virtual User UpdatedByuser { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string TRN { get; set; }
    public string EmailAddress { get; set; }
    public string Address { get; set; }
    public int ParishId { get; set; }
    public Parish Parish { get; set; }
    public int? BranchIssuedId { get; set; }
    public BranchLocation BranchIssued { get; set; }
    public int? BranchReceivedId { get; set; }
    public BranchLocation BranchReceived {get; set; }
}

public async Task<List<Application>> GetApplicationsByNameAsync(string name)
{
    if (string.IsNullOrEmpty(name))
        return null;
    return await _context.Application
        .AsNoTracking()
        .Include(app => app.BranchIssued)
        .Include(app => app.BranchReceived)
        .Include(app => app.Parish)
        .Where(app => app.LastName.ToLower().Contains(name.ToLower()) || app.FirstName.ToLower()
        .Contains(name.ToLower()))
        .GroupBy(app => new { app.TRN, app })
        .Select(x => x.Key.app)
        .ToListAsync()
        .ConfigureAwait(false);
}

以上GroupBy表达式无法在 VS Studio 中编译。我的目标是运行一个查询,按包含用户给定字符串的名称过滤结果,然后它应该按类似的方式对结果进行分组TRN返回视图的那些应用程序的列表。我想我真的很接近,但似乎无法弄清楚查询的最后一点。任何指导表示赞赏。

出现错误

InvalidOperationException: The LINQ expression 'DbSet<Application>
.Where(a => a.LastName.ToLower().Contains(__ToLower_0) || a.FirstName.ToLower().Contains(__ToLower_0))
.GroupBy(
source: a => new {
TRN = a.TRN,
app = a
},
keySelector: a => a)' 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 either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync()

UPDATE看来这肯定是由于最近更新以来 .net core 3.x 和 EF core 一起运行的方式发生了变化。我必须使用以下方法将其更改为客户评估AsEnumerable()代替ToListAsync()。 Steve py 给出的其余查询适用于此方法。即使在阅读了文档之后,我也不知道 groupby 在 LINQ 中是如何工作的,所以这对我帮助很大。然而,将查询传递给客户端评估可能会产生性能问题。


EF core 中的 GroupBy 支持就是一个笑话。

这在 EF6 的服务器上完美运行

var nonUniqueGroups2 = db.Transactions.GroupBy(e => new { e.AccountId, e.OpeningDate })
    .Where(grp => grp.Count() > 1).ToList();

在 EF core 中,它会导致异常“无法转换给定的 'GroupBy' 模式。在 'GroupBy' 之前调用 'AsEnumerable' 以在客户端对其进行评估。”消息有误导性,请勿致电AsEnumerable因为这应该在服务器上处理。

我找到了解决方法here https://tipsfordev.com/groupby-can-t-be-translated。额外的Select会有帮助的。

                var nonUniqueGroups = db.Transactions.GroupBy(e => new { e.AccountId, e.OpeningDate })
                    .Select(x => new { x.Key, Count = x.Count() })
                    .Where(x => x.Count > 1)
                    .ToList();

该解决方法的缺点是结果集不包含组中的项目。

有一个EF核心issue https://github.com/dotnet/efcore/issues/17068#issuecomment-586464350。请对其进行投票,以便他们真正解决此问题。

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

GroupBy 表达式翻译失败 的相关文章

随机推荐

  • 在处理 Angular2-typescript 项目时如何在 WebStorm 中隐藏 .js 和 .map 文件

    我尝试将扩展添加到 gitignore但结果如下 这些文件并未完全隐藏 在没有内置 TypeScript 编译器的情况下使用 WebStorm 时 例如 因为您正在使用其npm start已经完成编译的脚本 并且其他方法不起作用 您可以为
  • JavaScript 中的原型继承到底是如何工作的?

    我仍然没有完全理解 JavaScript 中的继承二分法 原型与经典 If the class只是原型上的语法糖 我应该如何去糖化它 您可以向我展示使用类和原型创建 React 元素的不同方法 即没有class React createCl
  • 添加批准 Instagram 客户端的功能

    我有一个经过批准的 Instagram 客户端 即我的应用程序已通过审核并已上线 并且我想向应用程序添加新功能 我听说一些应用程序的客户被撤销 我想知道 我可以在将新功能投入生产之前主动提交新功能以获得批准吗 有人对这个有经验么 我只是想避
  • 在 twitter-bootstrap 中居中模态

    我无法将我的模态集中在各种尺寸的 twitter bootstrap 中 你可以看活生生的例子here http makeshot net v 97dcd3c and here http makeshot net v 3f467c0 只需点
  • 在 Prawn 中使用堆叠边界框时自动启动新页面

    我想在 Prawn 中模拟表格的行为 但无法使用表格 因为我可以在单元格内绘制的内容受到限制 因此 我使用边界框来为每行内的元素创建上下文 我遇到的问题与行有关 我正在尝试这个 require prawn Prawn Document ge
  • 如何在 EF-Code-First 中指定主键名称

    我正在使用实体框架 Codefirst 来创建我的数据库 当我通过 ODBC 连接到 Access 2007 时 模式名称为 dbo pk Jobs 的默认主键似乎扰乱了它 如果我手动编辑名称并删除架构名称并将该主键重命名为 pk jobs
  • Jekyll 2.1 中的 SCSS @import

    我有这个项目结构 Project css main scss sass base layout pages vendor 我的 main scss 文件的内容 import sass base reset import sass base
  • Apache 正在将文件夹重定向到同名的 .html 文件

    我正在尝试将 404 json fales 重定向到 404 json 以 作为内容 但 apache 正在将文件夹重定向到具有相同文件夹名称的 html 文件 并且任何自定义 404 json 重定向都会失败 文件结构 示例1 示例2 e
  • Python 集合与列表

    在Python中 哪种数据结构更高效 更快 假设顺序对我来说并不重要 并且无论如何我都会检查重复项 那么 Python 集比 Python 列表慢吗 这取决于您打算用它做什么 在确定某个对象是否存在于集合中时 集合的速度要快得多 如x in
  • Typescript 重写抽象方法,该方法返回 void

    abstract class Base abstract sayHello void class Child extends Base sayHello return 123 抽象方法的返回类型是void但我可以用数字类型返回来实现它 我没
  • 为什么我的 keras LSTM 模型陷入无限循环?

    我正在尝试构建一个小型 LSTM 它可以通过在现有 Python 代码上进行训练来学习编写代码 即使是垃圾代码 我已将数百个文件中的数千行代码连接到一个文件中 每个文件以
  • 在 Ubuntu 16.04 上安装 OpenCV 时出错

    我一直在尝试使用几个教程在 Ubuntu 16 04 上安装 OpenCV 但总是出现错误 这是我按照本教程得到的最后一个 https github com BVLC caffe wiki Ubuntu 16 04 or 15 10 Ope
  • Android VOIP 应用程序在 Doze 模式下的行为

    我正在 Android 上开发旧版 VOIP 应用程序 它目前不使用 Google Cloud Messaging 技术 只是永远保留自己的 TCP 连接 最近 谷歌推出了 Android M 预览版打瞌睡模式 https develope
  • UITextView beginOfDocument 返回 nil

    我必须获取包含在屏幕上的字符串的位置UITextView 为此 我尝试获取相应的 UITextPosition 问题是UITextView method beginningOfDocument回报nil 同样适用于endOfDocuemen
  • 如何在Python中从流(不是磁盘支持的文件)读取Excel文件?

    XLRD已安装并测试 gt gt gt import xlrd gt gt gt workbook xlrd open workbook Sample xls 当我通过如下所示的 html 表单读取文件时 我可以访问所有值 xls file
  • 我们如何解决 PagerTitleStrip 和 PagerTabStrip 中的空白标题?

    支持 v4 版本 23 0 0 的 PagerTitleStrip 和 PagerTabStrip 存在问题 的标题视图ViewPager使用时PagerTitleStrip or PagerTabStrip以及版本 23 0 0 用于 M
  • 如何使用Guice注射器?

    我正在学习Guice 但我不太清楚如何使用Injector实例 最好是创建Injector在应用程序引导程序上实例一次 并将其设为公共单例 我们是否总是必须使用Injector getInstance SomeClass class 去我们
  • 在 Android Studio 中使用 GameCircleSDK 时,多个 dex 文件定义了 Lcom/amazon/ags/BuildConfig

    我最近将 Android 项目从 Eclipse 导入到 AndroidStudio 中 一切都很顺利 我能够解决大多数问题 除了 GameCircleSDK 库模块的问题 我不断收到以下错误 UNEXPECTED TOP LEVEL EX
  • 如何获取文件 *.apk 在 Android 设备中的位置

    需要以编程方式从 Android 设备检索 apk 文件名的帮助吗 如果我只知道文件名的一部分 任何机构都可以提供一些 Android 方法来执行此操作 甚至可以在 Android 下运行 shell 命令来获取文件位置吗 另外 是否有一种
  • GroupBy 表达式翻译失败

    Model public class Application Key public int ApplicationId get set public DateTime CreatedAt get set public DateTime Co