7

我有一个对象列表,我需要从中删除一些重复项。如果它们具有相同的 Id,我们认为它们是重复的,并且更喜欢 booleanValue 为假的那个。这是我到目前为止所拥有的:

objects.GroupBy(x => x.Id).Select(x => x.Where(y => !y.booleanValue));

我已经确定 GroupBy 没有进行这样的分组,所以我看不到其他任何功能是否正常工作。对此有什么想法吗?提前致谢。

4

2 回答 2

13

你可以这样做:

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());
于 2013-04-11T01:03:57.263 回答
0

像这样的东西应该工作:

var result =
    objects.GroupBy(x => x.Id).Select(g =>
        g.FirstOrDefault(y => !y.booleanValue) ?? g.First())

这假定您的对象是引用类型。

另一种可能性可能是Distinct()与 custom一起使用IEqualityComparer<>

于 2013-04-11T01:13:50.893 回答