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