我有一个XmlNodeList,想要调用.Where()来获取过滤后的Node-List。但这并不奏效。现在我想知道,为什么有时.Where()工作,有时不工作。我如何使用.Where()?
运行此代码XmlDocument doc = new XmlDocument();
doc.LoadXml(Xml);
var oTestNodes = doc.DocumentElement.ChildNodes.Where((item) => item.Name = "TestNode");
为了表明我的意思,这是一个相同的查询表达式:
var oTestNodes = from XmlNode oNode in doc.DocumentElement.ChildNodes
where oNode.Name = "TestNode"
select oNode;
答案 0 :(得分:3)
大多数LINQ to Objects方法适用于通用IEnumerable<T>
类型,而不是IEnumerable
。不幸的是,XmlNodeList
只实现了IEnumerable
。
听起来你只是在寻找Cast
,这是具有显式范围变量类型的查询表达式所使用的(因此查询表达式编译的原因):
XmlDocument doc = new XmlDocument();
doc.LoadXml(Xml);
var oTestNodes = doc.DocumentElement.ChildNodes
.Cast<XmlNode>()
.Where(item => item.Name = 'TestNode');
我个人建议使用LINQ to XML而不是XmlDocument
,如果可能的话 - 它是一个更好的API。