LINQ Where Syntax
本文关键字:Syntax Where LINQ | 更新日期: 2023-09-27 18:02:21
我有以下LINQ来填充html <tr>
标签的数据表与htmllagilitypack的帮助,每个标签有一个属性,我需要忽略该标签的innertext
,如果属性值是"rating-col"
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
子句里面做错了什么?
Where(td.Attributes[0].Value != "rating-col"))
应该有一个lambda在里面…如:
Where(c => c.Attributes[0].Value != "rating-col"))
看起来您缺少一个lambda,并且其中一个select是无序的。同样,这里也没有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);
}