我的课程Account
有属性:
publci decimal Amount { get; set; }
我有List<Account> accounts
,在某些条件下,我必须设置每个Amount
的{{1}}让我们说零(0)。我知道这可能被认为是重复的,因为我在Traverse a Linq Expression..和assign value using linq看到了类似的问题,但这两个问题至少已有几年的历史了。第一个对我更有意义,因为我尊重那些已经回答它的人,但同时使用Account
SetValue
指出了一些问题,即使Jon Skeet
是SetValue
我想在实践中做些什么。第二个答案&#34;听起来&#34;更有说服力但由于某种原因我怀疑ForEach
的使用,所以我想知道在我的案例中我应采取什么方法来改变Amount
值?
答案 0 :(得分:0)
LINQ通常用于选择数据,而不是批量更新。使用foreach迭代器循环并更新对象,甚至是List.ForEach方法。
答案 1 :(得分:0)
您可以使用Interactive Extensions,ForEach
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;
});
}