使用linq过滤列表以删除重复项

时间:2016-12-07 15:53:17

标签: c# .net linq

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

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

3 个答案:

答案 0 :(得分:2)

您需要为每个组投放分组行,以便在OrderByDescensing之后使用SelectGroupBy选择具有最高日期的记录:

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

答案 1 :(得分:1)

你可以这样做:

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

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

答案 2 :(得分:0)

当您GroupBy获得可以使用的组时,您需要为每个组选择具有最新日期的条目:

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