C# 如何删除两个列表中的一个<;对象>;基于对象属性的项目?

C# 如何删除两个列表中的一个<;对象>;基于对象属性的项目?,c#,asp.net,asp.net-web-api,c#-4.0,C#,Asp.net,Asp.net Web Api,C# 4.0,我有一个列表,其中包含相似但不同的createdOn 日期。我只想保留显示名称相同但最新的createdOn日期的项目。 我创建了一个谓词来比较基于displayName的列表项,因此我能够找到是否有一个具有相同displayName的项,但我不确定如何找到另一个具有较旧的createdOndate的项并将其删除 谓词 RemovedUpplicate方法: public static List RemoveDuplicatesSet(列表项,ValueComparer ValueCompare

我有一个列表,其中包含相似但不同的
createdOn
日期。我只想保留显示名称相同但最新的
createdOn
日期的项目。 我创建了一个谓词来比较基于displayName的列表项,因此我能够找到是否有一个具有相同displayName的项,但我不确定如何找到另一个具有较旧的
createdOn
date的项并将其删除

谓词

RemovedUpplicate方法:

public static List RemoveDuplicatesSet(列表项,ValueComparer ValueComparer)
{
//使用HashSet维护遇到的重复项表。
var result=新列表();
var set=新的HashSet(valueComparer);
对于(int i=0;i

有什么想法吗?

好吧,我会这样使用它:

List<Obj> items = items
    .GroupBy(x => x.Id) // or DisplayName, question is unclear
    .Select(g => g.OrderByDescending(x => x.CreatedOn).First())
    .ToList();
列出项目=项目
.GroupBy(x=>x.Id)//或DisplayName,问题不清楚
.Select(g=>g.OrderByDescending(x=>x.CreatedOn).First())
.ToList();

您还可以将比较器传递给
GroupBy
,尽管我不知道
ValueComparer
,但如果它实现了
IEqualityComparer
,它就会工作。

好吧,我会这样使用它:

List<Obj> items = items
    .GroupBy(x => x.Id) // or DisplayName, question is unclear
    .Select(g => g.OrderByDescending(x => x.CreatedOn).First())
    .ToList();
列出项目=项目
.GroupBy(x=>x.Id)//或DisplayName,问题不清楚
.Select(g=>g.OrderByDescending(x=>x.CreatedOn).First())
.ToList();

您还可以将比较器传递给
分组比
,尽管我不知道
值比较器
,但如果它实现了
IEqualityComparer
,则它可以工作。

我不知道您拥有的数据,但请尝试使用LINQ

var-dItems=items.Distinct();
如果你只想要最新的,使用lambda表达式

var-dItems=items.OrderByDescending(x=>x.createdOn).Distinct();

我不知道您拥有的数据,但请尝试使用LINQ

var-dItems=items.Distinct();
如果你只想要最新的,使用lambda表达式

var-dItems=items.OrderByDescending(x=>x.createdOn).Distinct();

旁注:您不需要检查HashSet是否包含它,只需添加它即可。如果未包含它,则将添加它,如果可以添加它,则返回
true
。按标识符分组,按日期降序分组,并为每个组取第一项什么是“谓词”?其中
等于
GetHashCode
?您还说您通过
Id
进行比较,但您通过
DisplayName
进行比较。我会更改它。我是说displayname,我想谨慎点。:)阅读关于IEqualityComparerSide注意:您不需要检查哈希集是否包含它,只需添加它即可。如果未包含它,则将添加它,如果可以添加它,则返回
true
。按标识符分组,按日期降序分组,并为每个组取第一项什么是“谓词”?其中
等于
GetHashCode
?您还说您通过
Id
进行比较,但您通过
DisplayName
进行比较。我会更改它。我是说displayname,我想谨慎点。:)阅读关于IEQualityComparer的内容这可能不起作用,因为Distinct也会考虑CreatedOn字段。因此,您将得到具有不同CreatedOn字段的重复ID。您是100%正确的。然后可能
var items=items.GroupBy(x=>x.Id).OrderByDescending(g=>g.createdOn).Select(group=>group.First())这可能不起作用,因为Distinct也会考虑CreatedOn字段。因此,您将得到具有不同CreatedOn字段的重复ID。您是100%正确的。然后可能
var items=items.GroupBy(x=>x.Id).OrderByDescending(g=>g.createdOn).Select(group=>group.First())
List<Obj> items = items
    .GroupBy(x => x.Id) // or DisplayName, question is unclear
    .Select(g => g.OrderByDescending(x => x.CreatedOn).First())
    .ToList();