C# - сводный список Linq с динамическими значениями c количество столбцов - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу развернуть список с динамическим c количеством столбцов. Пока я нашел несколько примеров, но я не могу понять, как применить их к моей проблеме. Используя следующее, я получаю список, основанный на значении Dev.DevType:

using (var context = new TableEntities())
{
    var result = (from Dev in context.Device
                  from Mod in context.Module.Where(m => Dev.ModId == m.Id && Dev.SecId == m.SecId).DefaultIfEmpty()
                  from DevT in context.DevType.Where(d => Dev.DevType == d.DevType).DefaultIfEmpty()
                  where Dev.DevType == 10
                  select new temp
                  {
                      DevName = Dev.DevName,
                      DevSuffix = DevT.Suffix,
                      Name = String.Concat(Mod.ModName, "_", Dev.DevName, "_", DevT.Suffix),
                  }).ToList();
}

В зависимости от значений Dev.DevType у меня могут быть разные выходные данные, например:

Dev. DevType == 10:

DevName     DevSuffix   Name
Enter       A           Door_Enter_A
Enter       Text        Door_Enter_Text
Enter       C           Door_Enter_C
Hall        A           Door_Hall_A
Hall        Text        Door_Hall_Text
Hall        C           Door_Hall_C

Но это также может быть что-то вроде:

Dev.DevType == 15:

DevName     DevSuffix   Name
Attic       A           Window_Attic_A
Attic       B           Window_Attic_B
Attic       Purple      Window_Attic_Purple
Attic       D           Window_Attic_D
Attic       E           Window_Attic_E
Kitchen     A           Window_Kitchen_A
Kitchen     B           Window_Kitchen_B
Kitchen     Purple      Window_Kitchen_Purple
Kitchen     D           Window_Kitchen_D
Kitchen     E           Window_Kitchen_E
Dining      A           Window_Dining_A
Dining      B           Window_Dining_B
Dining      Purple      Window_Dining_Purple
Dining      D           Window_Dining_D
Dining      E           Window_Dining_E

Я хочу повернуть это так что у меня есть столбцы, основанные на DevSuffix, а строки содержат Name, поэтому:

С Dev.DevType == 10:

A               Text            C
Door_Enter_A    Door_Enter_Text Door_Enter_C
Door_Hall_A     Door_Hall_Text  Door_Hall_C

И с Dev.DevType == 15:

A                   B                   Purple                D                 E
Window_Attic_A      Window_Attic_B      Window_Attic_Purple   Window_Attic_D    Window_Attic_E
Window_Kitchen_A    Window_Kitchen_B    Window_Kitchen_Purple Window_Kitchen_D  Window_Kitchen_E
Window_Dining_A     Window_Dining_B     Window_Dining_Purple  Window_Dining_D   Window_Dining_E

Я нашел несколько примеров, которые используют GroupBy() или GroupJoin(), но единственное, что я сделал, это:

.GroupBy(d => d.DevName, (Name) => new
{
    Key = DevName,
    Name = Name,
}).ToList();

Это приводит к тому, что выглядит как list в a list:

С Dev.DevType == 10:

DevSuffix   Name
A           Door_Enter_A
            Door_Hall_A
Text        Door_Enter_Text
            Door_Hall_Text
C           Door_Enter_C            
            Door_Hall_C

И с Dev.DevType == 15:

DevSuffix   Name
A           Window_Attic_A
            Window_Kitchen_A
            Window_Dining_A
B           Window_Attic_B
            Window_Kitchen_B
            Window_Dining_B
Purple      Window_Attic_Purple
            Window_Kitchen_Purple
            Window_Dining_Purple
D           Window_Attic_D
            Window_Kitchen_D
            Window_Dining_D
E           Window_Attic_E
            Window_Kitchen_E
            Window_Dining_E

Я не могу выясните, где go отсюда, поэтому любая помощь приветствуется. Заранее спасибо!

...