LINQ distinct显示重复项

本文关键字:显示 distinct LINQ | 更新日期: 2023-09-27 18:09:18

我正在尝试使用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());
}

LINQ distinct显示重复项

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

List<MacroConfig> dupeList = macroListWithDuplicates
.GroupBy(x => x.GUID)
.Where(grp => grp.Count() > 1)
.Select(grp => grp.First())
.ToList();
var unique = from p in macroListWithDuplicates
                   group p by new {p.GUID } 
                   into mygroup
                   select mygroup.First();

如何定义副本?

截然不同……

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

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

看一下MoreLinq NuGet包中的DistinctBy()操作符

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

这个怎么样:

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