繁体   English   中英

使用LINQ获取组的最后一条记录

[英]Get the last record of group using LINQ

我有一个清单:

var list = new List<Foo>() {
     new Foo() { FooId = 1, GroupId = 1, ValueA = 3}, 
     new Foo() { FooId = 2,GroupId = 1, ValueA = 40}, 
     new Foo() { FooId = 3,GroupId = 2, ValueA = 80}, 
     new Foo() { FooId = 4, GroupId = 2, ValueA = 20}, 
};

我只想获取最新记录,因此结果如下:

| GroupId | ValueA |
|---------|--------|
|     1   |   40   | 
|     2   |   20   |

根据您的需要,您可以更改OrderBy ,甚至可以在其中使用FirstLast

list
  .OrderByDescending(a => a.ValueA)
  .GroupBy(a => a.GroupId)
  .Select(g => g.Last());
var result = 
    ( from   p in List
      group  p by p.Value into g
      select new { 
        GroupId = g.OrderByDescending(x=>x.Id).FirstOrDefault().GroupId,
        ValueA = g.OrderByDescending(x => x.Id).FirstOrDefault().ValueA 
      }
    ).ToList();

这个对我有用...
因此,您可以尝试。

这是你想做的吗?

var result1 = from p in list
    group p by p.GroupId into g
    select new { GroupId = g.Key, MaxFooId = g.FooId.Max() };

var result2 = from p in result1
    join list q on p.MaxFooId equals q.FooId
    select new { GroupId = p.GroupId, ValueA = q.ValueA }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM