c# - EFCore 3 GroupBy+ToDictionary 引发不支持客户端 GroupBy

标签 c# linq entity-framework-core ef-core-3.0

无法翻译以下 GroupBy 查询并将引发错误:不支持客户端 GroupBy

IEnumerable<int> ids = new List<int> { 1, 2, 3 };
var q = db.Comments.Where(x => ids.Contains(x.Identifier))
    .GroupBy(x => x.Identifier);
var map = await q.ToDictionaryAsync(x => x.Key, x => x.Count());

应该如何重新安排查询才能在 dbms 上运行?

最佳答案

在任何 group by 之后,应该有一个仅使用 Group Key(及其属性)和聚合的 Select 语句。这类似于 Sql 语言中的限制。作为一种优化,EF 核心团队可能会支持调用具有相同限制的 ToDictionary,但他们没有,所以我们需要手动执行此操作:

IEnumerable<int> ids = new List<int> { 1, 2, 3 };
var q = db.Comments.Where(x => ids.Contains(x.Identifier))
    .GroupBy(x => x.Identifier)
    .Select(x => new { x.Key, Count = x.Count()});
var map = await q.ToDictionaryAsync(x => x.Key, x => x.Count);

这将被成功翻译。

关于c# - EFCore 3 GroupBy+ToDictionary 引发不支持客户端 GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59331835/

相关文章:

c# - EF Core 选择有条件的对象

c# - 具有值匹配的 asp.net mvc 模型验证

c# - 为什么我不能强制派生类具有无参数构造函数?

c# - 为一组单元格设置锁定为真

c# - 需要添加额外的列进行处理

c# - 迁移中未应用的最大长度

c# - 将字符串地址转换为int地址

c# - 检查字符串是否包含字典键 ->删除键并添加值

c# - LINQ 分组依据 和 "count-if"

asp.net-core - 无法使用单例中的作用域服务 applicationdbcontext