LINQ - 更新where子句中的字段

Gan*_*shT 5 linq

我的对象层次结构如下:

class Detail
{
    public List<Row> Rows { get; set; }
}

class Row
{
    public List<Column> Columns { get; set; }
}

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

我想设置column.IsUpdated = true其中column.Name ="id".我正在尝试这个,它不起作用.

detail.Rows.ForEach(r => r.Columns.Where(c => c.Name.ToLower().Equals("id")).ToList<Column>().Select(c => c.IsUpdated = true));
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 7

LINQ的哲学是没有副作用.这就是为什么故意让你不容易做到这一点.你可以用经典的方式做到这一点

var cols = details.Rows.SelectMany(r => r.Columns)
                       .Where(c => c.Name.ToLower().Equals("id"));
foreach(var col in cols) {
    col.IsUpdated = true;
}
Run Code Online (Sandbox Code Playgroud)

或者通过使用List.ForEach,但以不同的方式:

details.Rows.SelectMany(r => r.Columns)
            .Where(c => c.Name.ToLower().Equals("id")).ToList()
            .ForEach(c => { c.IsUpdated = true });
Run Code Online (Sandbox Code Playgroud)