2017-02-17 33 views
1

组的最后一个记录我有一个列表:获取使用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 | 
+0

什么是“最新”?对于GroupId,它总是最大的'ValueA'吗? – schlonzo

+0

没有..最新索引记录 –

+0

我看不到您的'Foo'类中的索引 – schlonzo

回答

1

取决于你想你可以改变OrderBy甚至可以使用本FirstLast什么。

list 
    .OrderByDescending(a => a.ValueA) 
    .GroupBy(a => a.GroupId) 
    .Select(g => g.Last()); 
+0

谢谢..这正是我所需要的 –

+0

但是,这与您的声明不同,它并不总是最大的'ValueA',但索引?! – schlonzo

+0

我解释说我想要最新的唱片而不是最大的ValueA唱片......并且我还提供了我想要的reault,其中包含ValueA 20,它显然不是最大的ValueA ..但无论如何,条件 –

0

这是你想要的去做?

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 }