我有以下型號
public class EngineComplianceMetric
{
public int Id { get; set; }
public DateTime BuildDate { get; set; }
public string SerialNumber { get; set; }
public bool Complied { get; set; }
}
SerialNumber不是桌子獨有的,因為多年來同一物品可能已修復多次。
我正在嘗試回傳一個串列,該串列僅包含某個設定日期之前的每個序列號的最新記錄。
到目前為止我有
previousCompliedList = _dbContext.ComplianceMetrics
.Where(e => e.BuildDate < startDate)
.Distinct().ToList();
但這只是回傳之前的所有內容startDate。
uj5u.com熱心網友回復:
您必須按序列號對專案進行分組,然后您必須獲取每個組中最新的專案(通過訂購它們并獲取第一個)。
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 在評論中的建議的解決方案。
我建議您在谷歌上搜索您的錯誤訊息:https ://stackoverflow.com/a/60874316/7175057
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438270.html
