LINQ:如何通过group by子句获取最大ID?

Md *_*lam 5 c# linq oracle group-by max

我正在寻找一种在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
Run Code Online (Sandbox Code Playgroud)

在其中我想获得两个记录作为列表,例如第二和第四
条记录(即ProcessSeq 12和14)。

var ProcessAudList = ProcessAudService.FilterBy(x => x.Active == "Y"    
  ).GroupBy(x => x.ProjectSeq).Max().ToList();
Run Code Online (Sandbox Code Playgroud)

它无法正常工作,因此如何在LINQ中做到这一点。请任何人帮助。

Har*_*sad 5

您想从每个组中选择最高记录。

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

查看演示代码


Cih*_*gun 5

当您使用GroupBy扩展名时,方法将返回您的IGrouping实例,您应按以下方式查询IGrouping实例;

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

希望这可以帮助