У меня есть следующий список объектов
List<Obj> source = new List<Obj>();
source.Add(new Obj() { Name = "o1", Attributes = new Dictionary<string, string> { { "attA", "1" }, { "attB", "1" }, { "attC", "1" } } });
source.Add(new Obj() { Name = "o2", Attributes = new Dictionary<string, string> { { "attA", "1" }, { "attB", "2" }, { "attC", "1" } } });
source.Add(new Obj() { Name = "o3", Attributes = new Dictionary<string, string> { { "attA", "1" }, { "attB", "3" }, { "attC", "2" } } });
source.Add(new Obj() { Name = "o4", Attributes = new Dictionary<string, string> { { "attA", "1" }, { "attB", "4" }, { "attC", "2" } } });
source.Add(new Obj() { Name = "o5", Attributes = new Dictionary<string, string> { { "attA", "2" }, { "attB", "5" }, { "attC", "3" } } });
source.Add(new Obj() { Name = "o6", Attributes = new Dictionary<string, string> { { "attA", "2" }, { "attB", "6" }, { "attC", "3" } } });
source.Add(new Obj() { Name = "o7", Attributes = new Dictionary<string, string> { { "attA", "2" }, { "attB", "7" }, { "attC", "4" } } });
source.Add(new Obj() { Name = "o8", Attributes = new Dictionary<string, string> { { "attA", "2" }, { "attB", "8" }, { "attC", "4" } } });
, поэтому мне нужно сгруппировать его по значениям определенного атрибута (ов), более того, имена этих атрибутов хранятся в отдельном списке, например:
List<string> groupBy = new List<string>() { "attA", "attC" };
я пытался использовать
var groups =
from s in source
group s by s.Attributes["attA"];
, это прекрасно работает, возвращая 2 группы:
- "1" - "o1 o2 o3 o4"
- "2" - "o5 o6 o7 o8"
но на самом деле мне нужно сгруппировать по "attA" и "attC" (или что-то еще в переменной groupBy) и получите следующие четыре группы:
- "1_1" - "o1 o2"
- "1_2" - "o3 o4"
- "2_3" - "o4 o5 "
- " 2_4 "-" o7 o8 "