2014-11-25 4 views
0

Я работаю над проектом для получения некоторых данных с веб-сайта. Чтобы закончить работу, я решил использовать HtmlAgilityPack.Ошибка типа с использованием Enumerable.Where

Все работает отлично, за исключением проблемы, с которой я столкнулся, связанной с лямбда-выражениями. Ошибка я получаю это

Не может неявно преобразовать тип 'System.Collections.Generic.IEnumerable' к 'BOOL'

var page = RetrievePage(url); //retrieve page 
var document = GetDocument(page); //get the document 
var optionNodes = document.Result.DocumentNode.SelectNodes("???"); //Select nodes based on selector 

//remove empty lines 
var filteredNodes = optionNodes[0].ChildNodes.Where(n => n.InnerText.Trim() != string.Empty); 

using (var nodes = filteredNodes.GetEnumerator()) 
{ 
    while (nodes.MoveNext()) 
    { 
     //error 
     var children = nodes.Current.ChildNodes.Where(c => c.Attributes.Where(t => t.Value == "???")); 
    } 
} 

Цените вашу помощь.

+0

Эта часть запроса LINQ будет возвращать IEnumerable [c.Attributes.Where (т => t.value == "???")], и вы передаете это к предыдущему, где оператор, и я предполагаю, что именно здесь происходит сбой преобразования. (вам может потребоваться обновить первое, где условие) – Thangadurai

ответ

5

Внутренний, где будут возвращаться строки. Внешний, где может быть только выражением, имеющим логическое значение. Таким образом, вы должны изменить это:

var children = nodes.Current.ChildNodes 
       .Where(c => c.Attributes.Where(t => t.Value == "???")); 

Для этого:

var children = nodes.Current.ChildNodes 
       .Where(c => c.Attributes.Any(t => t.Value == "???")); 

Или это:

var children = nodes.Current.ChildNodes 
       .Where(c => c.Attributes.All(t => t.Value == "???")); 

Или это:

var children = nodes.Current.ChildNodes 
       .Where(c => c.Attributes.Where(t => t.Value == "???").Count()>0); 

Ссылка:

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