使用Linq返回每个类别的第一个结果
本文关键字:第一个 结果 Linq 返回 使用 | 更新日期: 2023-09-27 18:17:58
我有一个类(ApplicationHistory)有3个属性:
ApplicantId, ProviderId, ApplicationDate
我将数据从数据库返回到一个列表中,但是其中包含重复的ApplicantId/ProviderId键。
我想抑制列表,以便列表只包含每个ApplicantId/ProviderId的最早的Application Date。
下面的例子是我目前所处的位置,但我不确定如何确保返回最早的日期。
var supressed = history
.GroupBy(x => new
{
ApplicantId = x.ApplicantId,
ProviderId = x.ProviderId
})
.First();
感谢所有建议
回想一下,GroupBy
调用形成的每个组都是一个IGrouping<ApplicationHistory>
,它实现了IEnumerable<ApplicationHistory>
。在这里阅读更多关于IGrouping
的信息。您可以订购这些,然后选择第一个:
var oldestPerGroup = history
.GroupBy(x => new
{
ApplicantId = x.ApplicantId,
ProviderId = x.ProviderId
})
.Select(g => g.OrderBy(x => x.ApplicationDate).FirstOrDefault());
您正在选择第一组。相反,从每组中选择第一项:
var supressed = history
.GroupBy(x => new {
ApplicantId = x.ApplicantId,
ProviderId = x.ProviderId
})
.Select(g => g.OrderBy(x => x.ApplicationDate).First());
或者查询语法(顺便说一下,在这种情况下,您不需要指定匿名对象属性的名称):
var supressed = from h in history
group h by new {
h.ApplicantId,
h.ProviderId
} into g
select g.OrderBy(x => x.ApplicationDate).First();