如何使用linq更改对象的值

我有以下声明:如果isdefault对此集合是真的,我需要将每个对象的isDefault属性设置为false。

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

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; } 

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

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

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

只需枚举LINQ结果并应用您的更新即可。

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; }