Reputation: 775
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
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
Reputation: 117057
Here's a single pass option:
var maxSample =
Samples
.Aggregate((x, y) => x.Date < y.Date ? y : x);
Upvotes: 1
Reputation: 149
var result= Sample.OrderByDescending(k => k.ID).FirstOrDefault().Date;
This is the best way to do this
Upvotes: -3
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
Reputation: 197
var lastInstDate = model.Max(i=>i.ScheduleDate);
We can get max date from the model like this.
Upvotes: 4
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
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