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