微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何查找重复项并保留后面的条目

如何解决如何查找重复项并保留后面的条目

我有两个来自不同来源的对象列表,如下所示:

public class PersonToolDto {
   public int PersonId { get; set; }

   public int ToolId { get; set; }

   public DateTime CreatedAt { get; set; }
}

var personToolListFromSomeSource = new List<PersonToolDto>{
     new PersonTool{1,1,2021-07-07},new PersonTool{2,new PersonTool{3,}

var personToolListFromAnotherSource = new List<PersonToolDto>{
     new PersonTool{1,2021-06-07},}

我想消除重复项,只保留最新的条目。使用 linq 或其他方法实现这一目标的简单快速方法是什么?按一个人的 id 进行的简单分组并不能消除重复项,我对如何比较日期有点迷茫。

我想保留结构并继续使用列表。

解决方法

您可以执行以下操作:

var withoutDuplicates = personToolListFromSomeSource
    .Concat(personToolListFromAnotherSource)
    .GroupBy(p => new { p.PersonId,p.ToolId })
    .Select(g => g.OrderByDescending(x => x.CreatedAt).First())
    .ToList();
,

对于即将推出的 .NET 6,您还可以使用新的 DistinctBy

var output = personToolListFromSomeSource
    .Concat(personToolListFromAnotherSource)
    .OrderByDescending(x => x.CreatedAt)
    .DistinctBy(x => x.PersonId)
    .ToList(); 

.NET 6 也有一个 MaxBy,所以另一个选项是:

var output = personToolListFromSomeSource
    .Concat(personToolListFromAnotherSource)
    .GroupBy(x => x.PersonId,(k,v) => v.MaxBy(x => x.CreatedAt))    
    .ToList();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。