Я хотел бы знать, возможно ли следующее, и будет ли оно иметь какие-либо преимущества в производительности.
Учитывая эту структуру;
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()))
};
- Получить элементы dbY, связанные с элементом dbX (FK)
- Десериализовать все элементы dbY в объект Y
- Объект Y имеет свойство Listкоторый я хочу инициализировать на уровне Y. Я хочу сделать это, потому что в этот момент у меня есть ссылка на все объекты Z (по FK).
Шаг 3, где я не делаюЗнать, что делать. Как инициализировать эти объекты Z из этой ссылки?
Если вопрос неясен или заголовок не отражает вопрос, пожалуйста, дайте мне знать.