Отказ от ответственности: Я боролся с этой проблемой уже 2 дня (я читал много похожих вопросов по SO) .. так что наберитесь терпения, я что-то упускаю из группыс Linq и с просьбой о помощи.
Структура классов
Заполнение данных выборки
У меня есть список Macrotab
.Каждый объект Macrotab
содержит список Tab
.Каждый Tab
объект внутри с Slot
внутри.
List<MacroTab> hierarchaldata = CreateHierarchaldata();
* Для удобства чтения я переместил CreateHierarchaldata, который заполняет набор данных примера, в .NetFiddle: https://dotnetfiddle.net/8mF1qI
Сглаживание
Следующие строки Сглаживание Эта структура с использованием Linq:
var flattenedList = (from macroTab in hierarchaldata
from tab in macroTab.Tabs
from slot in tab.Slots
select new {macroTab.IDMacroTab, tab.IDTab, slot.IDSlot}).ToList();
Агрегирование данных обратно в иерархию
Я пытался вернуться к исходному списку , используя Linq Group By
.Это было моей целью: объединить данные для идентификатора MacroTab, вкладок и слотов и воссоздать исходный список, но он не работает должным образом **:
var antiflatten = from macrotab in flattenedList
group macrotab by new {macrotab.IDMacroTab}
into macrotabs
let macrotabFirst = macrotabs.First()
select new MacroTab
{
IDMacroTab = macrotabFirst.IDMacroTab,
Tabs = (from macrotab in macrotabs
group macrotabs by new {macrotab.IDTab}
into tabs
let tabFirst = tabs.First()
select new Tab(){ HelperClass = tabFirst}).ToList()
};
** Свойство HelperClassэто просто для целей отладки, надеюсь, это не смущает, я оставил его, чтобы объяснить скриншот отладчика Visual Studio
Попробуйтена скрипаче