我有以下代码模糊,它将选择我的XML中具有 RatingNumericValue 的所有数据元素,然后将该数据元素的值设置为RatingNumericValue的内容。我想知道这是否适合使用谓词。有没有更好的方法来使用linq来做到这一点?
Dim dataEls = From item In copy...<Table>...<Row>...<Cell>...<Data> Select item Where item.@RatingNumericValue IsNot Nothing
For Each de In dataEls
de.Value = de.@RatingNumericValue
Next
答案 0 :(得分:5)
使用linq有更好的方法吗?
没有。 LINQ的目标是查询,它不包括修改对象。同样,谓词被用作一种匹配器 - 再次,与设置属性无关。
虽然你可以使用List<T>.ForEach
,但我建议不要这样做 - 与你已经拥有的简单foreach
循环相比,这是不必要的复杂。
理论上你可以编写一个设置属性然后总是返回true的谓词 - 然后你需要在结果上调用Count()
或者其他东西来强制对每个项执行谓词。我强烈建议不要这样做。改变他们被调用的数据的谓词是可怕的事情。
答案 1 :(得分:1)
您可以使用List<T>1 extension method ForEach to remove the explicit loop. However, that requires that you convert your
IEnumerable to a
列表。
http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx
http://craigwatson1962.com/2010/10/08/using-the-foreach-method/