LINQ 获取数组中最新项的数组

LINQ to get array of newest items in array

我有一个对象列表,例如这个:

public class ReportViewModel
{
    public string DocumentName { get; set; } = string.Empty;
    public DateTime? DocumentDate { get; set; }
    public string DocumentTypeName { get; set; } = string.Empty;
}

我想获取不同的对象列表,我将根据文档类型获取最新的文档,并且只获取每种类型的最新文档。 api 当前 returns 包含文档的列表,它可能来自相同文档类型但来自不同日期的文档,我怎样才能只从每种文档类型中获取最新文档?

您可以使用以下代码按上次创建时间区分元素:

using (var db = new YourDocumentDbContext())
{
var documents = db.Documents.AsEnumerable().GroupBy(a => a.DocumentTypeName).Select(a => a.OrderByDescending(a=>a.createdTime).FirstOrDefault());
}

您需要同时使用 GroupByFirstOrDefault

假设你有

  Name              DocumentDate      DocumentTypeName   
-------------------------------------------------------
 Document A-1        2021-05-01          A          
 Document A-2        2021-04-28          A
 Document B-1        2021-05-01          B          
 Document B-2        2021-04-28          B
 Document C-1        2021-05-01          C          
 Document C-2        2021-04-28          C
 Document C-3        2021-04-25          C

那么你需要做的是

 var groupedList = reportViewModelList.GroupBy(i => i.DocumentTypeName)
                .Select(i => i.OrderByDescending(o => o.DocumentDate).FirstOrDefault());

它给你如下预期的结果。

  Name              DocumentDate      DocumentTypeName   
-------------------------------------------------------
 Document A-1        2021-05-01          A
 Document B-1        2021-05-01          B
 Document C-1        2021-05-01          C

参见:How to get first record in each group using Linq