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