【问题标题】:linq to xml check for duplicates, any equalslinq to xml 检查重复项,任何等于
【发布时间】:2014-11-17 23:57:31
【问题描述】:

我有xml文件

<Nodes>
   <Node> one </Node>
   <Node> two </Node>
   <Node> three </Node>
</Nodes>

内部方法我正在接收要附加到文件中的节点列表,所以我想检查是否有重复项

public static void AppendToXmlFile(List<string> passedNodes)
{
    bool duplicates = passedNodes.Any(x=>x.Equals(doc.Element("Nodes")
                                 .Descendants("Node")
                                 .Select(a=>a.Value))); 
...
}

this query always returns false.

【问题讨论】:

标签: c# .net xml linq


【解决方案1】:

如果集合有任何项目,Any() 将返回 true。

要实现你想要的,你可以这样做。

var duplicates = passedNodes.Descendants("Node").GroupBy(node=>node.Value).Any(grp=>grp.Count()>1);

【讨论】:

    【解决方案2】:

    您正在将passedNodes 的元素xSelect 返回的整个枚举进行比较。它们永远不相等,因此总是错误的。你真的应该寻找两个列表的交集:

    bool duplicates = doc.Element("Nodes")
                         .Descendants("Node")
                         .Select(a=>a.Value)
                         .Intersect(passedNodes)
                         .Any();
    

    【讨论】:

      【解决方案3】:

      Any 中的Select 返回一个IEnumerable。这永远不会等于x(一个字符串)。试试这个

      bool duplicates = passedNodes.Any(x => doc.Element("Nodes")
                                   .Descendants("Node")
                                   .Where(a => a.Value == x)
                                   .Any());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多