Distinct()方法不起作用



我尝试使用Distinct()来过滤我的集合以防止重复,但我的linq查询仍然将相同的值添加到列表中。

thanks in advance.

 public ObservableCollection<string> CollectTopicsFromXml()
    {
         ObservableCollection<string> oc = new ObservableCollection<string>();
         XDocument xDoc = XDocument.Load(path);
         var topicColl = xDoc.Descendants("topic").Distinct();

         foreach (var topic in topicColl)
         {
             oc.Add(topic.Value);
         }
        return oc;
    }

Distinct默认使用引用相等,除非Equals(和GetHashCode)在项类型上被覆盖。由于Equals不会被XElement覆盖,所以无论其内容如何,每个元素都是"不同的"。

如果你想通过Name或其他属性(或属性的组合)来区分元素,你有几个选项:

  • 将元素投影到一个匿名类型,在默认情况下实现值相等:

    var topicColl = xDoc.Descendants("topic")
                        .Select(e => new {e.Name, e.Value})
                        .Distinct();
    
  • 使用GroupBy,允许在

  • 中传递表达式。
  • 创建一个实现IEqualityComparer<XElement>的类,并将其传递给Distinct
  • 使用DistinctBy from MoreLinq,它也允许在
  • 中传递相等表达式

相关内容

  • 没有找到相关文章

最新更新