Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除列表的重复项,通过C#中的属性值进行选择?_C#_Linq_List_Duplicates - Fatal编程技术网

删除列表的重复项,通过C#中的属性值进行选择?

删除列表的重复项,通过C#中的属性值进行选择?,c#,linq,list,duplicates,C#,Linq,List,Duplicates,我有一个对象列表,需要从中删除一些重复项。如果它们具有相同的ID,并且首选布尔值为false的副本,则我们认为它们是重复的。以下是我目前掌握的情况: objects.GroupBy(x => x.Id).Select(x => x.Where(y => !y.booleanValue)); 我已经确定GroupBy没有进行这样的分组,所以我看不出其他任何函数是否正常工作。有什么想法吗?提前感谢。您可以这样做: var results = from x in obje

我有一个对象列表,需要从中删除一些重复项。如果它们具有相同的ID,并且首选布尔值为false的副本,则我们认为它们是重复的。以下是我目前掌握的情况:

objects.GroupBy(x => x.Id).Select(x => x.Where(y => !y.booleanValue));
我已经确定GroupBy没有进行这样的分组,所以我看不出其他任何函数是否正常工作。有什么想法吗?提前感谢。

您可以这样做:

var results = 
    from x in objects
    group x by x.Id into g
    select g.OrderBy(y => y.booleanValue).First();
对于在
对象中找到的每个
Id
,它将选择
booleanValue==false
的第一个元素,或者选择第一个元素(如果它们都没有
booleanValue==false

如果您喜欢流利的语法:

var results = objects.GroupBy(x => x.Id)
                     .Select(g => g.OrderBy(y => y.booleanValue).First());

像这样的方法应该会奏效:

var result =
    objects.GroupBy(x => x.Id).Select(g =>
        g.FirstOrDefault(y => !y.booleanValue) ?? g.First())
这假定您的对象是引用类型


另一种可能是将
Distinct()
与自定义
IEqualityComparer

一起使用x.ID的类型是什么?@allonhadaya它是一个int。我更喜欢流畅的语法。:)非常感谢。作为其他人的旁注,我在最后一个括号后添加了“.ToList()”,并设置“objects=”而不是“var results=”。这样,我就可以对列表进行永久性的更改。@p.s.w.g如果我不想删除所有重复项,但总是在列表中保留一个,那该怎么办?我尝试了这个方法,但它对我的对象列表不起作用。我仍然收到了复制件。请看我的问题: