Mar*_*rus 5 linq entity-framework-core ef-core-3.1
我们已将服务从 .Net Core 2.1 更新到 3.1,在重新评估过渡期间中断或变慢的查询时,我们遇到了以下查询:
_context.InboundRecords.GroupBy(x => x.State.ToString()).ToDictionary(x => x.Key, x => x.Count())
Run Code Online (Sandbox Code Playgroud)
为了使这个“工作”与 3.1 重大更改一起,我们在 DBSet 和 Group By 之间添加一个 to list
_context.InboundRecords.ToList().GroupBy(x => x.State.ToString()).ToDictionary(x => x.Key, x => x.Count())
Run Code Online (Sandbox Code Playgroud)
这里的问题是,这会在进行分组之前将整个 InboundRecords 数据库集放入内存中。这与 2.1 的工作方式相同,但必须有更好的方法来做到这一点。我们可以调整这个查询以仅返回状态和该状态下的记录数吗?
我们可以调整这个查询以仅返回状态和该状态下的记录数吗?
当然,我们可以通过(1)使用服务器端GroupBy和仅包含键/聚合的中间投影,然后(2)将其客户端转换为所需的形状:
_context.InboundRecords
.GroupBy(x => x.State.ToString())
.Select(g => new { g.Key, Count = g.Count() }) // (1)
.ToDictionary(x => x.Key, x => Count); // (2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4184 次 |
| 最近记录: |