我想知道以下情况是否可能,以及它是否会对性能产生好处。
给出此结构;
public class X
{
[JsonIgnore]
public List<Y> Y { get; set; }
}
public class Y
{
[JsonIgnore]
public List<Z> Z { get; set; }
}
public class Z
{
...
}
简短版本
我可以在一行中初始化X.Y.Z吗?
工作(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对象?
如果问题不清楚或标题不能反映问题,请告诉我。