Salah Sanjabian
Salah Sanjabian

Reputation: 775

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

Upvotes: 40

Views: 90983

Answers (7)

Kirill Polishchuk
Kirill Polishchuk

Reputation: 56162

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

Upvotes: 94

Enigmativity
Enigmativity

Reputation: 117057

Here's a single pass option:

var maxSample =
    Samples
        .Aggregate((x, y) => x.Date < y.Date ? y : x);

Upvotes: 1

Rasindu De Alwis
Rasindu De Alwis

Reputation: 149

var result= Sample.OrderByDescending(k => k.ID).FirstOrDefault().Date;

This is the best way to do this

Upvotes: -3

Parag Devghare
Parag Devghare

Reputation: 40

IList<Student> studentList = new List<Student>() { 
    new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
    new Student() { StudentID = 2, StudentName = "Steve",  Age = 15 } ,
    new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
    new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
    new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 } 
};

var orderByDescendingResult = from s in studentList
                   orderby s.StudentName descending
                   select s;

Result : Steve Ron Ram John Bill

Upvotes: -2

Adarsh Babu PR
Adarsh Babu PR

Reputation: 197

var lastInstDate = model.Max(i=>i.ScheduleDate);

We can get max date from the model like this.

Upvotes: 4

BrokenGlass
BrokenGlass

Reputation: 160882

To get the maximum Sample value by date without having to sort (which is not really necessary to just get the maximum):

var maxSample  = Samples.Where(s => s.Date == Samples.Max(x => x.Date))
                        .FirstOrDefault();

Upvotes: 29

Albin Sunnanbo
Albin Sunnanbo

Reputation: 47038

List<Sample> q = Sample.OrderByDescending(T=>T.Date).Take(1).ToList();

But I think you want

Sample q = Sample.OrderByDescending(T=>T.Date).FirstOrDefault();

Upvotes: 3

Related Questions