Andrew White
Andrew White

Reputation: 1789

Dictionary of dates and values, finding value of max date per year in LINQ

Have a list like this:

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

I need to find the last value for each year, e.g. the result would be 520, 540?

Upvotes: 2

Views: 1336

Answers (2)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038850

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);
        }
    }
}

Upvotes: 1

Bala R
Bala R

Reputation: 108957

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

Upvotes: 7

Related Questions