我有一个对象列表,我需要从中删除一些重复项。如果它们具有相同的 Id,我们认为它们是重复的,并且更喜欢 booleanValue 为假的那个。这是我到目前为止所拥有的:
objects.GroupBy(x => x.Id).Select(x => x.Where(y => !y.booleanValue));
我已经确定 GroupBy 没有进行这样的分组,所以我看不到其他任何功能是否正常工作。对此有什么想法吗?提前致谢。
我有一个对象列表,我需要从中删除一些重复项。如果它们具有相同的 Id,我们认为它们是重复的,并且更喜欢 booleanValue 为假的那个。这是我到目前为止所拥有的:
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
在 中找到的每个objects
元素,它将选择第一个元素 wherebooleanValue == 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()
与 custom一起使用IEqualityComparer<>
。