LINQ:使用GroupBy删除重复项

时间:2014-04-15 16:59:19

标签: c# linq

我的代码类似于this post

List<MyObject> myList = new List<MyObject>(){new MyObject { Number1 = 1, Number2 = 2, Number3 = 3 },
                                             new MyObject { Number1 = 1, Number2 = 2, Number3 = 3 }};

var listWithoutDuplicated = myList
    .GroupBy(x => new { x.Number1, x.Number2, x.Number3 })
    .Select(x => x.First());

int counter = 0;
foreach (var item in listWithoutDuplicated)
{
    counter ++;
} 

该代码会返回counter = 1,因此效果很好,但为什么有必要.Select(x => x.First());而不仅仅是.First();

// This code would not remove duplicates.
var listWithoutDuplicated = myList
    .GroupBy(x => new { x.Number1, x.Number2, x.Number3 })
    .First();

非常感谢。

1 个答案:

答案 0 :(得分:3)

.First()从一系列组中返回第一组。

Select(group => group.First())接受一系列组并返回表示每个组中第一个项目的新序列。

两者都是完全有效的事情,也是非常不同的。您可以通过简单地打印出结果来看到这一点,或者就此而言,只需查看结果的类型(如果您不使用var,这将在代码中更明显。)