2011-07-05 63 views
2

發現每年最大日值有一個這樣的名單:詞典日期和價值觀,在LINQ

01/01/2009, 120 
04/01/2009, 121 
30/12/2009, 520 
01/01/2010, 100 
04/01/2010, 101 
31/12/2010, 540 

我需要找到每一年,如最後一個值結果會是520,540?

+0

如何名單中的代碼構建? – Variant

回答

7
var lastValues = records.OrderByDescending(r => r.Date) 
        .GroupBy(r => r.Date.Year) 
        .Select(g => g.First().Value); 
+0

當然。選擇(g => g.Last()。Value); ? –

+0

@Andrew我們不知道最初的順序,所以需要對它進行排序,所以'Order()'帶有'OrderByDescending()'或'Last()'的First()'應該可以工作。 –

1
class Program 
{ 
    static void Main() 
    { 
     var list = new[] 
     { 
      new { Date = new DateTime(2009, 1, 1), Value = 120 }, 
      new { Date = new DateTime(2009, 4, 1), Value = 121 }, 
      new { Date = new DateTime(2009, 12, 30), Value = 520 }, 
      new { Date = new DateTime(2010, 1, 1), Value = 100 }, 
      new { Date = new DateTime(2009, 4, 1), Value = 101 }, 
      new { Date = new DateTime(2010, 12, 31), Value = 540 }, 
     }; 
     var result = list 
      .GroupBy(x => x.Date.Year) 
      .Select(g => new { Date = g.Key, MaxValue = g.Max(x => x.Value) }); 
     foreach (var item in result) 
     { 
      Console.WriteLine(item); 
     } 
    } 
} 
+0

這是每年的最大值(也很有用!),我只想要每年的最後一個值。 –