如何在C#中使用LINQ仅更新对象列表的单个项目

Gow*_*ham 4 c#

我想更新具有文本属性"ALL"的列表

public class Season
{
  public string Text {get;set;}
  public string Value {get;set;}
  public bool ValueSelected {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rth 19

LINQ中的'Q'代表"查询".LINQ不是为了更新对象.

您可以使用LINQ查找要更新的对象,然后"传统"更新它.

var toUpdate = _seasons.Single(x => x.Text == "ALL");

toUpdate.ValueSelected = true;
Run Code Online (Sandbox Code Playgroud)

此代码假定只有一个条目Text == "ALL".如果没有或者有多个,此代码将抛出异常.

如果没有或者没有,请使用SingleOrDefault:

var toUpdate = _seasons.SingleOrDefault(x => x.Text == "ALL");

if(toUpdate != null)
    toUpdate.ValueSelected = true;
Run Code Online (Sandbox Code Playgroud)

如果可能有多个,请使用Where:

var toUpdate = _seasons.Where(x => x.Text == "ALL");

foreach(var item in toUpdate)
    item.ValueSelected = true;
Run Code Online (Sandbox Code Playgroud)

  • SQL 中的 Q 也代表 Query,但 SQL 用于更新数据库。 (2认同)

Den*_*sch 5

你可以使用这样的东西:

// Initialize test list.
List<Season> seasons = new List<Season>();

seasons.Add(new Season()
{
    Text = "All"
});
seasons.Add(new Season()
{
    Text = "1"
});
seasons.Add(new Season()
{
    Text = "2"
});
seasons.Add(new Season()
{
    Text = "All"
});

// Get all season with Text set to "All".
List<Season> allSeasons = seasons.Where(se => se.Text == "All").ToList();

// Change all values of the selected seasons to "Changed".
allSeasons.ForEach(se => se.Value = "Changed"); 
Run Code Online (Sandbox Code Playgroud)