c# - EFCore 3 GroupBy+ToDictionary 引发客户端 GroupBy 不支持
问题描述
以下GroupBy
查询无法翻译,将引发错误:client side GroupBy is not supported
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 上运行?
解决方案
在任何分组依据之后,应该有一个仅使用组键(及其属性)和聚合的 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);
这将被成功翻译。
推荐阅读
- entity-framework - 来自 DbContext 的 Ef 核心抽象 HasQueryFilter
- javascript - 如何打开仅选定评论的回复文本框?
- docker - unable to run a net core docker container
- html - LARAVEL: How to display all the same user type as the one currently logged in on a ?
Im new to laravel and im currently trying to get all the same user types as the one currently logged in to display on a table. For example, if a teacher
- html - 如何在 iPadOS 13 后出现的 iPad Safari WebApp 全屏模式下隐藏新的 url 栏?
- indexing - creating gin index in postgreqsql
- node.js - Firebase 托管无法访问 api 路由节点
- php - 如何在 ubuntu 中连接到 postgres 数据库
- python - Gunicorn ImportError: No module named app
- python - Remove Integers and special characters from column