Окончательный ответ, который я ожидаю, должен выглядеть так:
[
{
"ID": 4,
"Floor": "BackOffice Floor",
"OverallDescription": "Pretty Pretty Good",
"Permit": "Admin",
"TabOne": [
{
"Color": "Blue",
"status": "ReadWrite"
},
{
"Color": "Purple",
"status": "ReadOnly"
},
],
"TabTwo": [
{
"Color": "Black",
"status": "Offline"
},
{
"Color": "Green",
"status": "Online"
},
{
"Color": "White",
"status": "Blinking"
},
],
}
]
Я смоделировал для этого класс следующим образом:
public class AllSheets
{
// from parent calss
public int ID { get; set; }
public string Floor { get; set; } = string.Empty;
public string OverallDescription { get; set; } = string.Empty;
public string Permit { get; set; } = string.Empty;
// from children classes
public IEnumerable TabOne { get; set; } = Enumerable.Empty();
public IEnumerable TabTwo { get; set; } = Enumerable.Empty();
}
И вот эти три класса: один родительский, а два других — дочерние. Их JOIN находится в поле ID.
public class SheetMain
{
public int ID { get; set; }
public string Floor { get; set; } = string.Empty;
public string OverallDescription { get; set; } = string.Empty;
public string Permit { get; set; } = string.Empty;
}
public class SheetChildOne
{
public int ID { get; set; }
public string Floor { get; set; } = string.Empty;
public string Color { get; set; } = string.Empty;
public string Status { get; set;} = string.Empty;
}
public class SheetChildTwo
{
public int ID { get; set; }
public string Floor { get; set; } = string.Empty;
public string Color { get; set; } = string.Empty;
public string Status { get; set;} = string.Empty;
}
Обратите внимание, что я не хочу повторять некоторые поля, которые являются общими как для дочернего, так и для родительского элемента, например ID и Floor.
Я смог начать писать это сам, но мне нужна была помощь в двух вещах:
1. Как я могу это сделать? в моем запросе более одного объединения групп, поэтому я могу также включить SheetChildTwo.
2. Как я могу сказать, что НЕ следует включать некоторые из повторяющиеся поля, которые являются как родительскими, так и дочерними, например ID и Floor в этом примере.
Вот что я пробовал:
var result =
sheetMain.GroupJoin
(sheetChildOne,
work1 => work1.ID,
work2 => work2.ID,
(t1, t2) => new AllSheets
{
ID = t1.ID,
Floor = t1.Floor,
OverallDescription = t1.OverallDescription,
Permit = t1.Permit,
TabOne = t2.Select
(b => new SheetChildOne
{
Color = b.Color,
Status = b.Status,
}
)
}
);
Подробнее здесь: https://stackoverflow.com/questions/771 ... ts-in-linq
Объединение нескольких JOIN или GroupJOIN в разные наборы данных в LINQ. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение