2014-11-25 58 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); 

參考: