EFCore 3 GroupBy + ToDictionary提高客户端不支持GroupBy

时间:2019-12-14 02:26:11

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

以下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上运行?

1 个答案:

答案 0 :(得分:0)

任何group by之后,应该有一个Select语句,该语句仅使用Group Key(及其属性)和聚合。这类似于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);

这将成功翻译。