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

时间:2015-03-16 10:06:52

标签: c# linq ienumerable

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

1 个答案:

答案 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。