Enumerable.Where() 在 IEnumerable 上不可能?

Enumerable.Where() not possible on IEnumerable?

我有一个 XmlNodeList 并想调用 .Where() 来获取过滤后的节点列表。但这不起作用。现在我想知道,为什么有时 .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;

大多数 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 来 XML 而不是 XmlDocument 如果可能的话 - 它更好 API.