2014-11-25 54 views
0

我正在从一个项目中检索某个网站的一些数据。为了完成这项工作,我决定使用HtmlAgilityPack。使用Enumerable.Where输入错误

除了我面临的与lambda表达式相关的问题外,一切正常。我收到的错误是

无法隐式转换类型 'System.Collections.Generic.IEnumerable' 为 '布尔'

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 => t.Value == “???”)]和要传递它到了之前的操作符,我的猜测是,这是转换失败的地方。 (你可能需要修改第一个条件) – Thangadurai 2014-11-25 08:15:15

回答

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); 

参考: