我有以下声明:如果我对此集合的默认值为true,则需要将每个对象的isDefault属性设置为false。
custHead.lstCustomziation.Where(x => x.IsDefaultSelected == true).Select(x=>{x.IsDefaultSelected=false});
lstCustomziation is a collection.
答案 0 :(得分:12)
LINQ用于查询。您应该使用foreach
循环进行更改:
foreach (var item in custHead.lstCustomziation.Where(x => x.IsDefaultSelected))
{
item.IsDefaultSelected = false;
}
也就是说,如果其他项目的IsDefaultSelected
为false
,那么无条件地设置它可能更简单:
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;
}