2015-03-16 3 views
-2

У меня есть XmlNodeList и вы хотите вызвать .Where(), чтобы получить отфильтрованный список узлов. Но это не работает. Теперь мне интересно, почему иногда работает Where(), а иногда и нет. Как я могу получить этот код с помощью .Where()?Enumerable.Where() невозможно в IEnumerable?

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; 
+5

Не просто сказать «Я не ищу это» - сообщите нам * почему * вы хотите отклонить эти параметры. Кроме того, непонятно, почему вы помещаете эти выражения запроса в скобки ... –

+0

Это недопустимый код C#. Сначала проверьте свои ошибки компилятора. –

+1

Также обратите внимание, что я думаю, что вы имеете в виду «выражение запроса», когда вы говорите «Решение Linq» - вызов метода «Where» напрямую используется LINQ, IMO ... –

ответ

3

Большинство LINQ к объектам методы работают на родовом 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.

+0

Спасибо! Это то, что я искал :) И спасибо за подсказку «LINQ to XML» – Undercover1989

Смежные вопросы