Можно ли инициализировать вложенное свойство при установке родителя? - PullRequest
0 голосов
/ 06 ноября 2019

Я хотел бы знать, возможно ли следующее, и будет ли оно иметь какие-либо преимущества в производительности.

Учитывая эту структуру;

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. Получить элементы dbY, связанные с элементом dbX (FK)
  2. Десериализовать все элементы dbY в объект Y
  3. Объект Y имеет свойство Listкоторый я хочу инициализировать на уровне Y. Я хочу сделать это, потому что в этот момент у меня есть ссылка на все объекты Z (по FK).

Шаг 3, где я не делаюЗнать, что делать. Как инициализировать эти объекты Z из этой ссылки?

Если вопрос неясен или заголовок не отражает вопрос, пожалуйста, дайте мне знать.

...