使用LINQ查询和更新集合中的属性

Flo*_*eft 20 linq

使用LINQ更新集合中特定项的单个属性的最简单/最简单的方法是什么?

例如,如果我有以下列表:

public class Ticket
{
    public string Name { get; set; }
    public string Code { get; set; }
    public bool Selected { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ更新Ticket项的"Selected"属性,因为其"Name"属性的值为"Beach".在SQL中它将是:

UPDATE Tickets SET Selected = true WHERE Name = 'Beach'
Run Code Online (Sandbox Code Playgroud)

我以为我跟这个......

tickets.Select(x => { x.Selected = true; return x; }).ToList().Where(x => x.Name == "Beach");
Run Code Online (Sandbox Code Playgroud)

Stu*_*art 31

您可以更改顺序,然后使用ForEach运算符:

tickets
   .Where(x => x.Name == "Beach")
   .ToList()
   .ForEach(x => { x.Selected = true; });
Run Code Online (Sandbox Code Playgroud)

注意:

  • ToList()需要,因为IEnumerable的不支持的ForEach在LINQ的-见LINQ等效的foreach为IEnumerable的<T>
  • 为了便于阅读,最好将其分为linq查询,然后是更传统的foreach(x in list)C#循环
  • 如果这是linq-to-sql,那么你需要调用SubmitChanges()才能保留你的更改.


Atu*_*ary 8

迟到的答案,但我认为我们没有必要转换ToList()为斯图尔特提到的实际上我们能做的只是调整斯图尔特代码(这是一段很棒的代码)如下

tickets
   .Where(x => x.Name == "Beach")
   .All(x => x.Selected = true);
Run Code Online (Sandbox Code Playgroud)

另外一个选项

tickets
   .Where(x => x.Name == "Beach")
   .All(x => { x.Selected = true; return true; });
Run Code Online (Sandbox Code Playgroud)