使用Linq更新集合中除一个对象之外的所有对象

Bas*_*mme 5 .net c# linq

有没有办法使用Linq执行以下操作:

foreach (var c in collection)
{
    if (c.Condition == condition)
    {
        c.PropertyToSet = value;
        // I must also check I only set this value to one minimum and only one element.
    }
    else
    {
        c.PropertyToSet = otherValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

为了澄清,我想迭代集合中的每个对象,然后更新每个对象的属性,除了我的集合中应该更新为另一个值的一个元素.

此时我使用计数器检查我将我的值设置为我的集合中的一个且仅一个元素.我从这个例子中删除了它,让人们建议其他解决方案.

没有收集例外原来的问题是在这里

编辑

我问这个问题是因为我不确定是否可以使用LinQ.所以你的回答让我对LinQ有了一些看法.谢谢.

mel*_*okb 7

您可以使用.ForEach进行更改,并.Single验证只有一个元素符合条件:

// make sure only one item matches the condition
var singleOne = collection.Single(c => c.Condition == condition);
singleOne.PropertyToSet = value;

// update the rest of the items
var theRest = collection.Where(c => c.Condition != condition);
theRest.ToList().ForEach(c => c.PropertyToSet = otherValue);
Run Code Online (Sandbox Code Playgroud)


Ser*_*kiy 6

我不建议您使用Linq实现此功能.为什么?因为Linq用于查询,而不是用于修改.它可以返回与某些条件匹配的对象或不匹配的对象.但是要更新这些对象,您仍然需要使用foreach或将查询结果转换为列表并使用ForEach扩展名.两者都需要两次枚举序列.

所以,简单的循环将完成这项工作:

foreach (var c in collection)
{
    c.PropertyToSet = (c.Condition == condition) ? value : otherValue;
}
Run Code Online (Sandbox Code Playgroud)