首页 > 解决方案 > 设置父级时是否可以初始化嵌套属性?

问题描述

我想知道以下是否可行,以及它是否有任何性能优势。

鉴于这种结构;

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()))
};
  1. 获取与 dbX 项 (FK) 关联的 dbY 项
  2. 将所有 dbY 项反序列化为对象 Y
  3. 对象 Y 具有我想在 Y 级别初始化的 List 属性。我想这样做是因为那时我有一个对所有 Z 对象的引用(通过 FK)。

第 3 步是我不知道该怎么做的地方。如何从该引用中初始化那些 Z 对象?

如果问题不清楚或标题不反映问题,请告诉我。

标签: c#linqlinq-to-sqljson.netobject-initializers

解决方案


推荐阅读