如何使用LINQ为对象集合中每个对象的特定属性设置值
本文关键字:对象 属性 设置 LINQ 何使用 集合 | 更新日期: 2023-09-27 18:21:25
我有一个类Account
,它具有属性:
publci decimal Amount { get; set; }
我有List<Account> accounts
,在某些条件下,我必须将每个Account
的Amount
设置为零(0)。我知道这可能被认为是重复的,因为我在这里看到了类似的问题遍历Linq表达式。。这里使用linq赋值,但这两个问题都至少存在几年了。第一个对我来说更有意义,因为我尊重回答它的人,但同时在使用Jon Skeet
指出的SetValue
时也有一些担忧,尽管SetValue
是我在实践中想要做的。第二个答案"听起来"更有说服力,但出于某种原因,我怀疑ForEach
的使用,所以我想知道在我的情况下应该采取什么方法来更改Amount
的值?
您可以使用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;
});
}