linq到xml检查重复,任何等于

时间:2014-09-23 17:07:10

标签: c# .net xml linq

我有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.

3 个答案:

答案 0 :(得分:2)

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

为了达到你想要的目的,你可以做到这一点。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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