0

我有一个具有 3 个属性的类(ApplicationHistory):

申请者 ID、提供者 ID、申请日期

我将数据库中的数据返回到一个列表中,但是这包含重复的申请者 ID/提供者 ID 键。

我想取消该列表,以便该列表仅包含每个申请人 ID/ProviderId 的最早申请日期。

下面的示例是我目前所在的位置,但我不确定如何确保返回最早的日期。

    var supressed = history
        .GroupBy(x => new
        {
            ApplicantId = x.ApplicantId,
            ProviderId = x.ProviderId
        })
        .First();

所有建议表示赞赏。

4

2 回答 2

3

回想一下,由调用形成的每个组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()); 
于 2013-06-12T14:04:51.737 回答
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();
于 2013-06-12T14:01:01.550 回答