【问题标题】:Filter List using linq for remove duplicates items使用 linq 过滤列表以删除重复项
【发布时间】:2016-12-08 00:21:30
【问题描述】:

我有一个具有属性(dni、Name、lastname、Adate(dd/mm/yyyy))的类 Person。 人员列表中填充了重复项。

12345         Jhon      scofield       7/10/2015
24627         Liz       Pereira        7/06/2014
32313         Brian     O'conner       12/06/2012
12345         Jhon      scofield       7/10/2016
32313         Brian     O'conner       12/06/2015

我试试:

var x = ListFamily.GroupBy(p => p.dni).OrderByDescending(t => t.Adate)
                            .FirstOrDefault();

但 t.Adate 无法识别

var y = ListFamily.OrderBy(z => z.Adate).First();

但这只会返回一个家庭对象。

如何使用 linq(lambda 表达式)列表中的最新日期删除重复的人? 我的意思是,我想返回一个没有重复 dnis 的列表,并显示像这样具有最新日期的人

24627         Liz       Pereira        7/06/2014
12345         Jhon      scofield       7/10/2016
32313         Brian     O'conner       12/06/2015

【问题讨论】:

标签: c# .net linq


【解决方案1】:

您需要投影每个组的分组行以使用OrderByDescensingSelectGroupBy 之后选择日期最高的记录,例如:

var x = ListFamily.GroupBy(p => p.dni)
                  .Select(g=>g.OrderByDescending(x=>x.Adate)
                              .FirstOrDefault()
                         );

【讨论】:

    【解决方案2】:

    你可以这样做:

    var result= ListFamily.GroupBy(p => p.dni)
                          .Select(g=>g.OrderDescending(p=>p.Adate).FirstOrDefault());
    

    您需要按降序排列每个组以选择最新的。

    【讨论】:

      【解决方案3】:

      当您GroupBy 时,您会得到一个可枚举的组,因此您需要为每个组选择具有最新日期的条目:

      ListFamily.GroupBy(p => p.dni, (_, g) => g.OrderByDescending(x => x.Adate).FirstOrDefault());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 1970-01-01
        相关资源
        最近更新 更多