[英]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
)序列,因此您可以使用OrderBy
和First
子句來獲取所需的答案:
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.