【发布时间】:2020-07-07 07:25:53
【问题描述】:
我们已将服务从 .Net Core 2.1 更新到 3.1,在重新评估过渡期间中断或变慢的查询时,我们遇到了以下查询:
_context.InboundRecords.GroupBy(x => x.State.ToString()).ToDictionary(x => x.Key, x => x.Count())
为了使这个“工作”与 3.1 的重大更改,我们在 DBSet 和 Group By 之间添加一个列表
_context.InboundRecords.ToList().GroupBy(x => x.State.ToString()).ToDictionary(x => x.Key, x => x.Count())
这里的问题是,在进行分组之前,这会将整个 InboundRecords 数据库集带入内存。这与 2.1 的工作方式相同,但必须有更好的方法来做到这一点。我们可以调整这个查询以只返回状态和该状态下的记录数吗?
【问题讨论】:
-
当您必须尽早切换到客户端评估时,我希望(推测)
AsEnumerable比ToList更可取。这可能会在新版本的 EF Core 中得到改进,因为他们已同意考虑改进GroupBy翻译。
标签: linq entity-framework-core ef-core-3.1