簡體   English   中英

Linq OrderBy 然后 GroupBy - group by 意外更改列表的順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM