2015-06-24 4 views
0

Представьте меня есть база данных с одной или нескольких таблиц с большим количеством одного индексов с одним или несколькими столбцами ...Как создать словарь словарей ...?

Я хочу, чтобы создать и залить в Dictionary<string, Dictionary<string, List<string>>>, так что я могу получить все индексы определенной таблицы или все столбцы определенной комбинации таблицы и индекса.

Здесь кортежей с помощью таблицы, индекса и имена столбцов (данные выборки)

List<Tuple<string, string, string>> tuples = new List<Tuple<string, string, string>>(); 
tuples.Add(Tuple.Create("T1", "I1", "C1")); 
tuples.Add(Tuple.Create("T1", "I1", "C2")); 
tuples.Add(Tuple.Create("T1", "I1", "C3")); 
tuples.Add(Tuple.Create("T1", "I2", "C1")); 
tuples.Add(Tuple.Create("T2", "I1", "C1")); 
tuples.Add(Tuple.Create("T3", "I1", "C1")); 
tuples.Add(Tuple.Create("T3", "I1", "C2")); 
tuples.Add(Tuple.Create("T3", "I2", "C1")); 
tuples.Add(Tuple.Create("T3", "I2", "C2")); 
tuples.Add(Tuple.Create("T3", "I2", "C3")); 

Лучшее, что я мог придумать это:

Dictionary<string, Dictionary<string, List<string>>> perTI = new Dictionary<string, Dictionary<string, List<string>>>(); 
foreach (var group in tuples.GroupBy(x => Tuple.Create(x.Item1, x.Item2))) 
{ 
    perTI[group.Key.Item1] = new Dictionary<string, List<string>>(){ { group.Key.Item2, group.Select(g => g.Item3).ToList() } }; 
} 

Кто-нибудь знает, как это сделать с 1 заявлением LINQ?

+0

Если это работает я не понимаю, почему вам нужно улучшить. В любом случае это вне темы. –

+2

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он принадлежит http://codereview.stackexchange.com/ –

+0

Какой тип "linq"? LINQ to XML? –

ответ

1

Все в одной строке, если это то, что вы хотите:

Dictionary<string, Dictionary<string, List<string>>> dict = 
    new List<Tuple<string, string, string>>().GroupBy(item => item.Item1) 
     .ToDictionary(
      groupedByItem1 => groupedByItem1.Key, 
      groupedByItem1 => 
      groupedByItem1.GroupBy(item => item.Item2) 
       .ToDictionary(
        groupedByItem2 => groupedByItem2.Key, 
        groupedByItem2 => groupedByItem2.Select(item => item.Item3).ToList())); 
+1

Очень хороший ответ, спасибо! – RayCW

Смежные вопросы