LINQ中的最大日期记录

本文关键字:日期 记录 LINQ | 更新日期: 2023-09-27 18:22:48

我在MS Sql Server中有一个名为sample的表,其中包含以下值:

 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

现在我想写LINQ查询,结果会是这样的:

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

我写了这个,但它不起作用:

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

LINQ中的最大日期记录

.NET 6MaxBy LINQ方法开始。

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

.NET 6:之前

O(n log n):

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

O(n)–但在序列上迭代两次:

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

或者您可以使用MoreLINQ,它具有MaxBy方法,即O(n)

要按日期获得最大Sample,而不必排序(这对于获得最大值来说并不是真正必要的):

var maxSample  = Samples.Where(s => s.Date == Samples.Max(x => x.Date))
                        .FirstOrDefault();
var lastInstDate = model.Max(i=>i.ScheduleDate);

我们可以从这样的模型中获得最大日期。

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

但我认为你想要

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

这里有一个单程选项:

var maxSample =
    Samples
        .Aggregate((x, y) => x.Date < y.Date ? y : x);
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;

结果:Steve罗恩猛撞约翰票据

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

这是完成的最佳方法