我有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.
答案 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
的元素passedNodes
与Select
返回的整个枚举进行比较。它们永远不会平等,因此总是错误的。您应该真正寻找两个列表的交集:
bool duplicates = doc.Element("Nodes")
.Descendants("Node")
.Select(a=>a.Value)
.Intersect(passedNodes)
.Any();