LINQ Where語法

c# html-agility-pack linq

我有以下LINQ在HTMLAgilityPack的幫助下從html <tr>標籤填充數據表,每個標籤都有一個屬性,如果屬性值為“rating-col”,我需要忽略該標籤的innertext

nodes.Skip(1)
.Select(
tr => tr.Elements("td").
    Select(td => td.InnerText.
        Where(td.Attributes[0].Value != "rating-col")).
        ToArray()).
        ToList().
        ForEach(row => dt.Rows.Add(row));

沒有Where子句,一切正常,在Where子句中我做錯了什麼?

一般承認的答案

看起來你錯過了一個lambda,其中一個選擇是亂序的。此外,這裡沒有ToList()ForEach()原因。你的ToList()調用使事情變得更慢,並迫使你使用更多的內存。你需要它的唯一原因是獲得ForEach()擴展,並且這並不能在正常的foreach循環中為你節省任何東西。另外,雖然我不是該領域的專家,但我理解ForEach()擴展功能樣式很差,因為它幾乎假設你造成了副作用(一個很大的功能禁忌)。由於linq深受功能編程範式的啟發,我試著關注這些事情。

foreach (var row in nodes.Skip(1)
     .Select(tr => tr.Elements("td")
         .Where(td => td.Attributes[0].Value != "rating-col")
         .Select(td => td.InnerText)
         .ToArray()))
{
    dt.Rows.Add(row);
}

熱門答案

Where(td.Attributes[0].Value != "rating-col"))應該有一個lambda ...例如:

Where(c => c.Attributes[0].Value != "rating-col"))




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因