根据序列号返回最近的记录
Returning Most Recent Records Based on Serial Number
我有以下型号
public class EngineComplianceMetric
{
public int Id { get; set; }
public DateTime BuildDate { get; set; }
public string SerialNumber { get; set; }
public bool Complied { get; set; }
}
SerialNumber
并非 table 所独有,因为同一个项目多年来可能已被修复多次。
我正在尝试 return 一个列表,该列表仅包含某个设定日期之前的每个序列号的最新记录。
到目前为止我有
previousCompliedList = _dbContext.ComplianceMetrics
.Where(e => e.BuildDate < startDate)
.Distinct().ToList();
但这只是 return 在 startDate
之前的所有内容。
您必须按序列号对物品进行分组,然后您必须取出每组中最新的物品(通过订购它们并取出第一件)。
previousCompliedList = _dbContext.ComplianceMetrics
.Where(cm => cm.BuildDate < startDate).ToList()
.GroupBy(cm => cm.SerialNumber)
.Select(cm => cm.OrderByDescending(c => c.BuildDate).First());
根据您的错误,您必须在 where 之后(GroupBy 之前)添加 .ToList()。但是这样做会从数据库中获取日期较小的所有项目,然后 运行 在内存中对其进行额外的操作。
如果您不想从数据库中获取所有项目,则必须实施类似于 Astrid 在评论中建议的解决方案。
我建议用谷歌搜索你的错误信息:
我有以下型号
public class EngineComplianceMetric
{
public int Id { get; set; }
public DateTime BuildDate { get; set; }
public string SerialNumber { get; set; }
public bool Complied { get; set; }
}
SerialNumber
并非 table 所独有,因为同一个项目多年来可能已被修复多次。
我正在尝试 return 一个列表,该列表仅包含某个设定日期之前的每个序列号的最新记录。
到目前为止我有
previousCompliedList = _dbContext.ComplianceMetrics
.Where(e => e.BuildDate < startDate)
.Distinct().ToList();
但这只是 return 在 startDate
之前的所有内容。
您必须按序列号对物品进行分组,然后您必须取出每组中最新的物品(通过订购它们并取出第一件)。
previousCompliedList = _dbContext.ComplianceMetrics
.Where(cm => cm.BuildDate < startDate).ToList()
.GroupBy(cm => cm.SerialNumber)
.Select(cm => cm.OrderByDescending(c => c.BuildDate).First());
根据您的错误,您必须在 where 之后(GroupBy 之前)添加 .ToList()。但是这样做会从数据库中获取日期较小的所有项目,然后 运行 在内存中对其进行额外的操作。
如果您不想从数据库中获取所有项目,则必须实施类似于 Astrid 在评论中建议的解决方案。
我建议用谷歌搜索你的错误信息: