[英]Linq OrderBy then GroupBy - group by unexpectedly changes order of list
當我運行此表達式時,我可以看到列表順序按最高 ActionId 的順序正確
var list = db.Actions.Where(z => z.RunId
== RunId).OrderByDescending(w =>
w.ActionId).ToList();
我只想選擇每個ActionName 的最高 ActionId,所以我現在這樣做:
var list = db.Actions.Where(z => z.RunId
== RunId).OrderByDescending(w =>
w.ActionId).GroupBy(c => new
{
c.ActionName,
c.MachineNumber,
})
.Select(y =>
y.FirstOrDefault()).ToList();
當我查看列表的內容時,它沒有選擇具有最高 ActionId 的 ActionName/MachineNumber,我認為這是通過排序然后使用 FirstOrDefault() 來實現的。
知道我哪里出錯了嗎? 我想按 ActionName 和 MachineId 對記錄進行分組,然后為每個組選擇具有最高 ActionId 的記錄
不要對有序集合進行分組,而是先對集合進行分組,然后為每個組選擇具有最高 ID 的記錄。 GroupBy
不能保證在 LINQ to SQL 中保留每個組中的順序 - 它取決於您的數據庫服務器。
var list = db.Actions.Where(z => z.RunId == RunId).GroupBy(c => new
{
c.ActionName,
c.MachineNumber,
})
.Select(y => y.OrderByDescending(z => z.ActionId).FirstOrDefault()).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.