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

本文关键字:对象 属性 设置 LINQ 何使用 集合 | 更新日期: 2023-09-27 18:21:25

我有一个类Account,它具有属性:

publci decimal Amount { get; set; }

我有List<Account> accounts,在某些条件下,我必须将每个AccountAmount设置为零(0)。我知道这可能被认为是重复的,因为我在这里看到了类似的问题遍历Linq表达式。。这里使用linq赋值,但这两个问题都至少存在几年了。第一个对我来说更有意义,因为我尊重回答它的人,但同时在使用Jon Skeet指出的SetValue时也有一些担忧,尽管SetValue是我在实践中想要做的。第二个答案"听起来"更有说服力,但出于某种原因,我怀疑ForEach的使用,所以我想知道在我的情况下应该采取什么方法来更改Amount的值?

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

您可以使用Interactive Extensions,它们在IEnumerable<T>上运行ForEach(Ix是Rx的"镜像"),因此您可以避免调用ToList方法(并避免不必要的分配)。

accounts.Where(a => a.Amount > 10).ForEach(a => a.Amount = 0);

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

    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;
            });
    }