LINQ distinct显示重复

时间:2014-06-19 18:03:44

标签: c# linq linq-to-xml

我正在尝试使用LINQ来查找重复项。根据我的阅读,我应该使用distinct。下面的查询在列表中查找重复项,但它包含原始值及其副本。

我怎样才能获得不同的项目?

Class MacroConfig
{

    public Guid? GUID { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }
}

//This is the linq query I am using
List<MacroConfig> dupeList = macroListWithDuplicates.GroupBy(x => x.GUID)
    .Where(y => y.Count() > 1)
    .SelectMany(y => y)
    .Distinct()
    .ToList();

foreach (var x in dupeList)
{
    Console.WriteLine(x.ToString());
}

4 个答案:

答案 0 :(得分:4)

Distinct()将返回不同的MacroConfig对象,因为MacroConfig是distinct()接收的输入。 如果您只想为每个GUID获得1个项目,则只需从每个组中选择第一个项目:

List<MacroConfig> dupeList = macroListWithDuplicates
.GroupBy(x => x.GUID)
.Where(grp => grp.Count() > 1)
.Select(grp => grp.First())
.ToList();

答案 1 :(得分:1)

var unique = from p in macroListWithDuplicates
                   group p by new {p.GUID } 
                   into mygroup
                   select mygroup.First();

答案 2 :(得分:0)

如何定义副本?

...鲜明

  

使用默认的相等比较器来比较值,从序列中返回不同的元素。

http://msdn.microsoft.com/en-us/library/vstudio/bb348436(v=vs.100).aspx

查看MoreLinq NuGet包中的DistinctBy()运算符。

DistinctBy允许您轻松定义构成不同实体的确切内容。

答案 3 :(得分:0)

这个怎么样:

List<MacroConfig> dupeList = macroListWithDuplicates.GroupBy(x => x.GUID)
    .Select(y => y.First())
    .ToList();