如何解决如何查找重复项并保留后面的条目
我有两个来自不同来源的对象列表,如下所示:
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 举报,一经查实,本站将立刻删除。