2

HTMLAgilityPackを使用してhtmlタグからデータテーブルを埋めるために次のLINQを使用しています。各タグには1つの属性があり、属性値が「rating-col」の場合はそのタグ<tr>を無視する必要があります。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));

WhereWhere句がないと問題なく動作しますが、句内で何が間違っているのでしょうか。

4

2 に答える 2

5

Where(td.Attributes[0].Value != "rating-col"))ラムダが含まれている必要があります...など:

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

于 2013-03-06T04:12:13.763 に答える
4

ラムダが欠落していて、Selects の 1 つが故障していたようです。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);
}
于 2013-03-06T04:23:25.050 に答える