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());
}
您需要同时使用 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
我有一个对象列表,例如这个:
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());
}
您需要同时使用 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