C# LINQ获取数组中最新项目的数组
我有一个包含如下对象的列表:C# LINQ获取数组中最新项目的数组,c#,linq,linq-to-entities,linq-to-objects,C#,Linq,Linq To Entities,Linq To Objects,我有一个包含如下对象的列表: public class ReportViewModel { public string DocumentName { get; set; } = string.Empty; public DateTime? DocumentDate { get; set; } public string DocumentTypeName { get; set; } = string.Empty; } 我希望获得不同的对象列表,在其中我将根据文档类型获取最
public class ReportViewModel
{
public string DocumentName { get; set; } = string.Empty;
public DateTime? DocumentDate { get; set; }
public string DocumentTypeName { get; set; } = string.Empty;
}
我希望获得不同的对象列表,在其中我将根据文档类型获取最新文档,并且只获取每种类型的最新文档。api当前返回带有文档的列表,它可能来自同一文档类型但日期不同的文档,如何仅从每个文档类型中获取最新文档?您可以使用以下代码在上次创建时区分元素:
using (var db = new YourDocumentDbContext())
{
var documents = db.Documents.AsEnumerable().GroupBy(a => a.DocumentTypeName).Select(a => a.OrderByDescending(a=>a.createdTime).FirstOrDefault());
}
您需要同时使用
GroupBy
和FirstOrDefault
假设你有
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
请参阅:它与“如何从每种文档类型中仅获取最新文档”的问题有何关联?好的,很抱歉回答了这个问题。代码块返回一个列表。在条目中修改了行。