使用Linq更新嵌套属性

本文关键字:属性 嵌套 更新 Linq 使用 | 更新日期: 2023-09-27 18:28:45

我有一个类具有非基元属性
我需要更新父类的那个属性的一些子属性。

public class Parent
{
    public string Abc { get; set; }
    public Childclass Pos { get; set; }
}
public class Childclass
{
     public string Value { get; set; }
}
List<Parent> parents = new List<Parent>()
Parent p1 = new Parent();
p1.Pos.Value = "1";
parents.Add(p1);
Parent p2 = new Parent();
p2.Pos.Value = "2";
parents.Add(p2);

现在我需要更新父母where Pos.Value == "2"中的Pos

使用Linq更新嵌套属性

List<Parent> parents = new List<Parent>();
Parent p1 = new Parent();
p1.Pos = new Childclass() { Value = "1" };
parents.Add(p1);
Parent p2 = new Parent();
p2.Pos = new Childclass() { Value = "2" };
parents.Add(p2);

如果你需要更新每个项目:

foreach (Parent parent in parents.Where(e => e.Pos.Value.Equals("2")))
    parent.Pos.Value = "new value";

如果您只需要更新第一项:

parents.FirstOrDefault(e => e.Pos.Value.Equals("2")).Pos.Value = "new value";

我想,你需要这样:

parents.Where(l => l.Pos.Value.Equals("2")).ToList().ForEach(i => i.Post.Value="updateValue");

您可以使用Enumerable.FirstOrDefault筛选出该值,它将检索与谓词匹配的第一个元素:

var parent = parents.FirstOrDefault(
                x => x.Pos.Value.Equals("2", StringComparison.OrdinalIgnoreCase));
parent.Pos.Value = "3";

如果你有很多查找,也许你想使用Dictionary<string, Parent>,其中键是一些不变的值,如果可能的话:

var keyToParent = new Dictionary<string, Parent>
{
    ["Abc"] = p1,
    ["Dfc"] = p2
};
if (!keyToParent.ContainsKey("Abc"))
    return;
var retrievedParent = keyToParent["Abc"];
retrievedParent.Pos.Value = "3";