在LINQ查询中将MAX添加到现有条件

时间:2014-03-10 13:05:51

标签: c# linq

我有以下查询从列表中提取项目。

latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID).FirstOrDefault();

我想找到带有latestStatusDate的行...我正在使用MAX函数但它返回null,因为我相信Max正在寻找所有文档的最大值,我只是希望它找到包含此batchId的文档的最大值

latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID && d.prodStatus == openDocs.Max(d => d.ProdStatus)).FirstOrDefault();

有什么想法吗?

钽, 瑜珈

3 个答案:

答案 0 :(得分:1)

您可以使用OrderByDescending

latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID)
    .OrderByDescending(d => d.StatusDate)
    .FirstOrDefault();

答案 1 :(得分:0)

我相信这样的事情会让你得到你想要的东西

var latestDoc = openDocs.Where(d => d.docBatchId == HARD_CODED_ID)
    .OrderByDescending(d => d.ProdStatus)
    .FirstOrDefault();

答案 2 :(得分:0)

以下c#编译并在LinqPad ...

中运行
    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();

结果是03/01/2014 00:00:00(2014年1月3日),这是docBatchId为123的3个项目的最新statusDate。