【发布时间】:2019-09-05 11:00:47
【问题描述】:
在使用 Entity Framework Core 的 ASP.NET Core Razor Pages 应用程序中,我使用下面的代码从数据库中填充平均值、最小值和最大值的列表。虽然这适用于迄今为止记录的相对较小的数据量,但我认为它不会随着数据量的增长而很好地扩展。是否有更有效的方法在应用程序中执行此操作,或者我应该忘记在应用程序代码中执行此操作并从存储过程中获取它?
ServerStatsList = _context
.PerfLog
.Select(l => new ServerStats {
CompanyName = l.CompanyName,
ServerName = l.ServerName,
Average = 0,
Minimum = 0,
Maximum = 0
})
.Distinct()
.ToList();
foreach (ServerStats s in ServerStatsList)
{
s.Average = _context
.PerfLog
.Where(l => l.CompanyName == s.CompanyName && l.ServerName == s.ServerName)
.Average(l => l.MemoryAvailableMBytes);
s.Minimum = _context
.PerfLog
.Where(l => l.CompanyName == s.CompanyName && l.ServerName == s.ServerName)
.Min(l => l.MemoryAvailableMBytes);
s.Maximum = _context
.PerfLog
.Where(l => l.CompanyName == s.CompanyName && l.ServerName == s.ServerName)
.Max(l => l.MemoryAvailableMBytes);
}
【问题讨论】:
-
谢谢 Selvin,我去看看
-
PerfLog.GroupBy(l=> new { l.CompanyName, l.ServerName}).Select(g=>new ServerStats { CompanyName = g.Key.CompanyName, ... Maximum = g.Max(l=>l.MemoryAvailableMBytes) })我没有测试过……但总体思路
标签: c# linq asp.net-core entity-framework-core