Я видел похожие вопросы, но не то, что отвечает моему сценарию. Итак ...
Учитывая типы:
public class Flat
{
public string Group1 { get; set; }
public string Group2 { get; set; }
public int Value { get; set; }
}
public class Group1
{
public Name { get; set; }
public Group2[] Group2 { get; set; }
}
public class Group2
{
public Name { get; set; }
public int[] Values;
}
Я хочу преобразовать массив Flat в иерархию Group1
/ Group2
, указанную выше. Массив выглядит следующим образом:
var flats = new []
{
new Flat { Group1 = "G1", Group2 = "G1.1", Value = 12 },
new Flat { Group1 = "G1", Group2 = "G1.1", Value = 22 },
new Flat { Group1 = "G1", Group2 = "G1.2", Value = 13 },
new Flat { Group1 = "G2", Group2 = "G1.1", Value = 14 },
new Flat { Group1 = "G2", Group2 = "G2.2", Value = 15 },
};
Таким образом, вывод будет эквивалентен:
var result = new []
{
new Group1
{
Name = "G1"
Group2 = []
{
new Group2
{
Name = "G1.1"
Values = [] { 12, 22 }
},
new Group2
{
Name = "G1.2"
Values = [] { 13 }
},
}
},
new Group1
{
Name = "G2"
Group2 = []
{
new Group2
{
Name = "G2.1"
Values = [] { 14 }
},
new Group2
{
Name = "G2.2"
Values = [] { 15 }
},
}
}
}
Я попытался и потерпел неудачу, используя GroupBy
:
var result = flats
.GroupBy(f => f.Group1)
.Select(f => f.GroupBy(x => x.Group2).Select(y => y.Select(x => x.Value)));
Я возился с этим в linqpad
, но не нашел решения. Сначала я пробовал анонимные типы, но добавил типы групп.
Возможно ли это с linq
?