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());
}
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();