根据序列号返回最近的记录

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 在评论中建议的解决方案。

我建议用谷歌搜索你的错误信息: