我有一个表包含一个Date数据类型的列。我想得到其日期值最大的记录。
Linq支持Max
,但它返回值本身。我想要它的值最大的记录。
任何帮助!
答案 0 :(得分:6)
假设Records
是您的对象的集合,而获取最大值的列/属性称为value
:
var q = Records.OrderByDescending(p => p.value)
.FirstOrDefault();
答案 1 :(得分:2)
您可以按日期订购该集合并选择第一个:
List<Record> records = new List<Record>();
records.OrderByDescending(record => record.Date).First();
当集合为空(返回FirstOrDefault()
)时,您可以使用null
不抛出异常
答案 2 :(得分:1)
不幸的是,LINQ没有MaxBy
运算符。您可能需要按适当的属性对项目进行降序排序,然后取第一个值:
Customer lastRegistered = db.Customers.OrderByDescending(x => x.RegistrationDate)
.FirstOrDefault();
希望SQL Server可以在没有真正进行完整排序的情况下解决如何做到这一点:)
在LINQ to Objects中,编写MaxBy
方法当然相对容易 - 例如我已经在MoreLINQ中使用了。
答案 3 :(得分:0)
假设“record”是指来自底层数据库中的表的记录,该表可以有效地处理生成的SQL(并支持最大聚合):
var q =
from t in thetable where t.Date == thetable.Max( d => d.Date ) select t;
这将找到与最大日期匹配的记录。 First()
可以用来抓住一个。