如何使用linq更改对象的值

时间:2014-02-14 14:28:44

标签: c# linq

我有以下声明:如果我对此集合的默认值为true,则需要将每个对象的isDefault属性设置为false。

  custHead.lstCustomziation.Where(x => x.IsDefaultSelected == true).Select(x=>{x.IsDefaultSelected=false});

lstCustomziation  is a collection.

4 个答案:

答案 0 :(得分:12)

LINQ用于查询。您应该使用foreach循环进行更改:

foreach (var item in custHead.lstCustomziation.Where(x => x.IsDefaultSelected))
{
    item.IsDefaultSelected = false;
}

也就是说,如果其他项目的IsDefaultSelectedfalse,那么无条件地设置它可能更简单:

foreach (var item in custHead.lstCustomziation)
{
    item.IsDefaultSelected = false;
}

答案 1 :(得分:5)

Linq用于查询,而非更新。您可以使用正常循环获取要更改的项目列表,然后然后更新:

var list = custHead.lstCustomziation.Where(x => x.IsDefaultSelected == true)

foreach(var item in list)
    item.IsDefaultSelected=false;

答案 2 :(得分:1)

正如LINQ的Q所说,LINQ专为查询而非更新而设计。

只需枚举LINQ结果并应用更新。

答案 3 :(得分:0)

Linq最初可能是为了查询而创建的,但它已经发展并被用作函数式编程方法,等同于“map”,“reduce”和其他语言中使用的“filter”。

在你的例子中,我建议:

var list = custHead.lstCustomziation.Where(x => x.IsDefaultSelected == true)
            .Select(x=> TransformItem(x));

private XType TransformItem(XType item){
    item.IsDefaultSelected=false;
    return item;
}