2017-02-17 55 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 }