我有一个具有3个属性的类(ApplicationHistory):
ApplicantId,ProviderId,ApplicationDate
我将数据库中的数据返回到列表中,但是这包含重复的ApplicantId / ProviderId键。
我想压制列表,以便列表中只包含每个ApplicantId / ProviderId的最早申请日期。
以下示例是我目前所处的位置,但我不确定如何确保返回最早的日期。
var supressed = history
.GroupBy(x => new
{
ApplicantId = x.ApplicantId,
ProviderId = x.ProviderId
})
.First();
所有建议都表示赞赏。
答案 0 :(得分:3)
回想一下GroupBy
调用形成的每个群组都是IGrouping<ApplicationHistory>
,实现IEnumerable<ApplicationHistory>
。详细了解IGrouping
here。您可以订购并选择第一个:
var oldestPerGroup = history
.GroupBy(x => new
{
ApplicantId = x.ApplicantId,
ProviderId = x.ProviderId
})
.Select(g => g.OrderBy(x => x.ApplicationDate).FirstOrDefault());
答案 1 :(得分:2)
您正在选择第一组。而是从每个组中选择第一项:
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();