C# 将MAX添加到LINQ查询中的现有条件
下面的查询从列表中提取一个项目C# 将MAX添加到LINQ查询中的现有条件,c#,linq,C#,Linq,下面的查询从列表中提取一个项目 latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID).FirstOrDefault(); 我还想找到最晚状态日期的行……我正在使用MAX函数,但它返回null,因为我相信MAX正在查找all文档的MAX,我只想让它找到包含此batchId的文档的MAX latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID &a
latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID).FirstOrDefault();
我还想找到最晚状态日期的行……我正在使用MAX函数,但它返回null,因为我相信MAX正在查找all文档的MAX,我只想让它找到包含此batchId的文档的MAX
latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID && d.prodStatus == openDocs.Max(d => d.ProdStatus)).FirstOrDefault();
有什么想法吗
Ta,
yogi你可以使用降序法
OrderByDescending
:
latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID)
.OrderByDescending(d => d.StatusDate)
.FirstOrDefault();
我相信这样的事情会让你得到你想要的
var latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID)
.OrderByDescending(d => d.ProdStatus)
.FirstOrDefault();
下面的c#编译并运行在
结果是2014年1月3日00:00:00(2014年1月3日),这是docBatchId为123的3个项目的最新状态日期。从
OrderByDescending
中选择第一个
,尝试使用OrderBy
降序对结果进行排序,那么您的第一个结果将是最长日期。感谢大家,我提交了第一个答案作为解决方案。
var openDocs = new [] {
new {
docBatchId = 123,
StatusDate = new DateTime(2014, 01, 01)
},
new {
docBatchId = 123,
StatusDate = new DateTime(2014, 01, 02)
},
new {
docBatchId = 123,
StatusDate = new DateTime(2014, 01, 03)
}
,
new {
docBatchId = 456,
StatusDate = new DateTime(2014, 01, 04)
}
};
var HARD_CODED_ID = 123;
var latestDoc = (from doc in openDocs
where doc.docBatchId == HARD_CODED_ID
select doc.StatusDate).Max();
latestDoc.Dump();