c# - 设置父级时是否可以初始化嵌套属性?
问题描述
我想知道以下是否可行,以及它是否有任何性能优势。
鉴于这种结构;
public class X
{
[JsonIgnore]
public List<Y> Y { get; set; }
}
public class Y
{
[JsonIgnore]
public List<Z> Z { get; set; }
}
public class Z
{
...
}
精简版
我可以在一行中初始化 XYZ 吗?
工作(foreach)版本;
X x = null;
var dbitem = db.SingleOrDefault(...);
if (dbitem != null)
{
x = new X
{
Y = dbX.dbY.Select(a =>
JsonConvert.DeserializeObject<Y>(a.json)).ToList()
};
x.Y.ForEach(a =>
a.Z = dbX.dbY.Single(b => b.id == a.id)
.dbZ.Select(q => JsonConvert.DeserializeObject<Z>(q.json)).ToList());
}
实验性的
一次创建Y和Z,无需查询.Single(b => b.id == a.id)
x = new X
{
Y = dbX.dbY.Select(a =>
JsonConvert.DeserializeObject<Y>(a.json).Z.AddRange(
a.dbZ.Select(b =>
JsonConvert.DeserializeObject<Z>(b.json)).ToList()))
};
- 获取与 dbX 项 (FK) 关联的 dbY 项
- 将所有 dbY 项反序列化为对象 Y
- 对象 Y 具有我想在 Y 级别初始化的 List 属性。我想这样做是因为那时我有一个对所有 Z 对象的引用(通过 FK)。
第 3 步是我不知道该怎么做的地方。如何从该引用中初始化那些 Z 对象?
如果问题不清楚或标题不反映问题,请告诉我。