【问题标题】:LINQ distinct is showing duplicatesLINQ distinct 显示重复
【发布时间】:2014-06-19 18:03:44
【问题描述】:

我正在尝试使用 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 基于什么属性 GUID 或所有其他属性?

标签: c# linq linq-to-xml


【解决方案1】:

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

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

【讨论】:

  • +1,您的回答清楚地表明 OP 实际上是在寻找那些存在重复的不同项目。
  • @Habib 太糟糕了,OP 没有说清楚。我们其他人的回答可能不同。
【解决方案2】:
var unique = from p in macroListWithDuplicates
                   group p by new {p.GUID } 
                   into mygroup
                   select mygroup.First();

【讨论】:

  • 为什么不简单地“按 p.GUID 分组 p”?不需要匿名类型。
【解决方案3】:

如何定义重复?

不同的...

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

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

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

DistinctBy 让您可以轻松准确地定义不同实体的构成要素。

【讨论】:

  • 具有相同 GUID 属性值的 XElement
  • Distinct 查看默认的相等比较器,它不查看您的属性。
【解决方案4】:

这个怎么样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多