有没有更优雅的方法来使用linq来设置属性值?

时间:2012-09-27 18:59:09

标签: .net vb.net linq linq-to-xml

我有以下代码模糊,它将选择我的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

2 个答案:

答案 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/