Search code examples
c#.netsql-serverlinqmax

max date record in LINQ


I have this table named sample with these values in MS Sql Server:

 ID    Date    Description
1    2012/01/02 5:12:43    Desc1
2    2012/01/02 5:12:48    Desc2
3    2012/01/03 5:12:41    Desc3
4    2012/01/03 5:12:43    Desc4

Now I want to write LINQ query that result will be this:

4    2012/01/03 5:12:43    Desc4

I wrote this but it doesn't work:

List<Sample> q = (from n in  Sample.Max(T=>T.Date)).ToList();

Solution

  • Starting from .NET 6 MaxBy LINQ method is available.

    var result = items.MaxBy(i => i.Date);
    

    Prior to .NET 6:

    O(n):

    var result = items.Aggregate((x, y) => x.Date > y.Date ? x : y);
    

    O(n) – but iterates over the sequence twice:

    var max = items.Max(i => i.Date);
    var result = items.First(i => i.Date == max);
    

    O(n log n):

    var result = items.OrderByDescending(i => i.Date).First();