使用Enumerable.Where键入错误

时间:2014-11-25 08:08:36

标签: c# lambda html-agility-pack

我正在开发一个从网站上检索一些数据的项目。为了完成这项工作,我决定使用HtmlAgilityPack。

除了与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 == "???"));
   }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

内部将返回行。外部where只能是一个具有布尔值的表达式。所以你必须改变这个:

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

参考: