簡體   English   中英

LINQ:如何通過group by子句獲取最大ID?

[英]LINQ: How to get the Max Id with a group by clause?

我正在尋找一種在LINQ中使用'Group By'子句獲取最大ID記錄的方法

考慮以下樣本數據

  Table: ProcessAud

  ProcessSeq     ProjectSeq   ProjectValue    Active
      11              1           50000          Y
      12              1           10000          Y
      13              2           70000          Y 
      14              2           90000          Y

我想在其中獲得兩個記錄作為列表,例如第二和第四
記錄(即)ProcessSeq 12和14。

var ProcessAudList = ProcessAudService.FilterBy(x => x.Active == "Y"    
  ).GroupBy(x => x.ProjectSeq).Max().ToList();

它無法正常工作,因此如何在LINQ中做到這一點。 請任何人幫助。

您想從每個組中選擇最高記錄。

var ProcessAudList = ProcessAudService.Where(x => x.Active == "Y")
.GroupBy(x => x.ProjectSeq, (key,g)=>g.OrderByDescending(e=>e.ProjectValue).First());

查看演示代碼

當您使用GroupBy擴展名時,方法將返回您的IGrouping實例,您應按以下方式查詢IGrouping實例;

var ProcessAudList = collection.Where(x => x.Active == "Y").GroupBy(x => x.ProjectSeq).Select(x => x.OrderByDescending(a => a.ProcessSeq).FirstOrDefault()).ToList();

希望這可以幫助

您已完成大部分工作,但使用Max是錯誤的用語。

每個IGrouping都是其自身的IEnumerable (或IQueryable )序列,因此您可以使用OrderByFirst子句來獲取所需的答案:

var ProcessAudList = ProcessAudService
    .FilterBy(x => x.Active == "Y")
    .GroupBy(x => x.ProjectSeq)
    .Select(grp => grp.OrderByDescending(x => x.ProcessSeq).First())
    .ToList();

Select子句將處理每個組,按ProcessSeq降序排列組,然后選擇第一個。 對於您提供的數據,這將選擇ProcessSeq等於12和14的行。

使用此代碼,您可以在foreach中獲取所有最大ID

var res = from pa in ProcessAud
      group Cm by pa.ProjectSeq into Cm1
      select new
      {
           _max = Cm1.Max(x => x.ProcessSeq)
      };
foreach (var item in res)
{
    //item._max have biggest id in group
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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