LINQ获取数组中最新项目的数组
Posted
技术标签:
【中文标题】LINQ获取数组中最新项目的数组【英文标题】:LINQ to get array of newest items in array 【发布时间】:2021-06-02 10:06:58 【问题描述】:我有一个像这样的对象的列表:
public class ReportViewModel
public string DocumentName get; set; = string.Empty;
public DateTime? DocumentDate get; set;
public string DocumentTypeName get; set; = string.Empty;
我想获得不同的对象列表,其中我将根据文档类型获取最新文档,并且只获取每种类型的最新文档。该api当前返回带有文档的列表,它可能来自相同文档类型但来自不同日期的文档,我怎样才能只获取每种文档类型的最新文档?
【问题讨论】:
【参考方案1】:您需要同时使用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
见:How to get first record in each group using Linq
【讨论】:
【参考方案2】:您可以使用以下代码按上次创建时间区分元素:
using (var db = new YourDocumentDbContext())
var documents = db.Documents.AsEnumerable().GroupBy(a => a.DocumentTypeName).Select(a => a.OrderByDescending(a=>a.createdTime).FirstOrDefault());
【讨论】:
它与“如何才能从每种文档类型中仅获取最新文档”这个问题有什么联系? 好的,很抱歉这个答案。代码块返回一个列表。条目中的行已修改。以上是关于LINQ获取数组中最新项目的数组的主要内容,如果未能解决你的问题,请参考以下文章