使用LINQ更新集合中特定项目的单个属性的最简单/最简单方法是什么?
例如,如果我有以下列表:
public class Ticket
{
public string Name { get; set; }
public string Code { get; set; }
public bool Selected { get; set; }
}
如果“Name”属性的值为“Beach”,我如何使用LINQ更新Ticket项的“Selected”属性。在SQL中它将是:
UPDATE Tickets SET Selected = true WHERE Name = 'Beach'
我以为我正走在正确的轨道上......
tickets.Select(x => { x.Selected = true; return x; }).ToList().Where(x => x.Name == "Beach");
答案 0 :(得分:31)
您可以更改顺序,然后使用ForEach运算符:
tickets
.Where(x => x.Name == "Beach")
.ToList()
.ForEach(x => { x.Selected = true; });
注意:
ToList()
,因为IEnumerable不支持Linq中的ForEach - 请参阅LINQ equivalent of foreach for IEnumerable<T> foreach(x in list)
C#循环SubmitChanges()
才能保留更改。答案 1 :(得分:8)
回答迟到了,但我认为我们不必转换为ToList()
,正如斯图尔特所提到的那样我们能做的只是调整Stuart代码(这是一段很棒的代码)如下
tickets
.Where(x => x.Name == "Beach")
.All(x => x.Selected = true);
另一个选择
tickets
.Where(x => x.Name == "Beach")
.All(x => { x.Selected = true; return true; });
答案 2 :(得分:1)
让我先说这个,不要使用LINQ设置这样的属性,这不是LINQ的用法。
你应该编写查询以选择要更改的行,在循环中更改它们,并将更改提交到数据库(如果是LINQ to SQL)。
var query = tickets.Where(ticket => ticket.Name == "Beach");
foreach (var item in query)
item.Selected = true;
// if LINQ to SQL
context.SubmitChanges();