如何使用LINQ将值设置为对象集合中每个对象的特定属性

时间:2014-09-10 11:49:52

标签: c# linq

我的课程Account有属性:

publci decimal Amount { get; set; }

我有List<Account> accounts,在某些条件下,我必须设置每个Amount的{​​{1}}让我们说零(0)。我知道这可能被认为是重复的,因为我在Traverse a Linq Expression..assign value using linq看到了类似的问题,但这两个问题至少已有几年的历史了。第一个对我更有意义,因为我尊重那些已经回答它的人,但同时使用Account SetValue指出了一些问题,即使Jon SkeetSetValue我想在实践中做些什么。第二个答案&#34;听起来&#34;更有说服力但由于某种原因我怀疑ForEach的使用,所以我想知道在我的案例中我应采取什么方法来改变Amount值?

3 个答案:

答案 0 :(得分:0)

LINQ通常用于选择数据,而不是批量更新。使用foreach迭代器循环并更新对象,甚至是List.ForEach方法。

答案 1 :(得分:0)

您可以使用Interactive ExtensionsForEach IEnumerable<T> ToList(Ix是Rx的“镜像”),因此您可以避免调用accounts.Where(a => a.Amount > 10).ForEach(a => a.Amount = 0); 方法(并避免不必要的分配)。

{{1}}

答案 2 :(得分:-1)

    class Account
    {
        public decimal Amount { get; set; }
    }

    public static void Main(string[] a)
    {
        IEnumerable<Account> collection = new Account[] 
        {
            new Account() {Amount = 4},
            new Account() {Amount = 5},
            new Account() {Amount = 6},
            new Account() {Amount = 7},
        };

        Parallel.ForEach(collection, n =>
            {
                n.Amount = 0;
            });
    }