2015-04-03 2 views
0

У меня есть словарь, для которого я хочу, чтобы получить результаты, соответствующие таковым из спискаКак получить значение из словаря <String, Object>

вот что я сделал до сих пор

  Dictionary<string, Dictionary<string, int>> SomeDictionary = new Dictionary<string, Dictionary<string, int>>(); 
     List<int> MyList = new List<int>() 
     { 

      2,3,4,5 
     }; 

     Dictionary<string, int> internalDictionary = new Dictionary<string, int>(); 
     internalDictionary.Add("two", 2); 
     internalDictionary.Add("three", 3); 
     internalDictionary.Add("four", 4); 
     internalDictionary.Add("five", 5); 

     Dictionary<string, int> AnotherDictionary = new Dictionary<string, int>(); 
     AnotherDictionary.Add("six", 6); 
     AnotherDictionary.Add("three", 3); 
     AnotherDictionary.Add("seven", 7); 


     SomeDictionary.Add("Dictionary1", internalDictionary); 
     SomeDictionary.Add("Dictionary2", AnotherDictionary); 


     var res = from l in MyList 
        select(from q in 
        (from p in 
         (from s in SomeDictionary 
         select s) 
        select p) where q.Value.Equals(l) select q); 

В Возвращаемое значение равно null. что я пропала?

Мне нужно совместить KeyValuePair, где значение соответствует внутренним значениям словаря.

+2

хорошо, вы сравниваете 'objects' (2,3,4, ...) с' strings' ('" 2 "', ...), кроме этого 'from c in col select c == col' – Carsten

+0

Да, что мне делать вместо этого? – Rohit

ответ

1

Попробуйте это:

var res = from l in MyList 
       from q in SomeDictionary 
       from w in q.Value 
       where w.Value == l 
       select w; 

Я получаю это:

res

+1

Расскажите мне об этом! Трудно ударить по воротам, когда ворота ворот продолжают двигаться ... – Enigmativity

3

Объяснение:

  1. Выберите Многим объединить все внутренние словари в All In One словаря.
  2. Список и SelectMany являются IEnumerable. Таким образом, соединение возможно для объектов IEnumerable.
  3. Однако List содержит строковое значение, в то время как объект IEnumerable, возвращаемый из SelectMany, имеет целочисленное значение.

Созданный внутренний запрос соединения с строковым и целочисленным значением после преобразования целого в строку. См скринкаст, которые могут потребоваться выходной

Screen cast showing working code

Этот фрагмент кода Linq может быть полезным:

var allinone = (from l in MyList 
         join d in SomeDictionary.SelectMany(s => s.Value) on l equals d.Value 
         select d); 
+1

Что изменилось? Пожалуйста, уточните свой ответ. –

+0

Вы даже проверили это с помощью компилятора? Почему это должно быть полезно? Где связь с вопросом? – Carsten

+0

Пожалуйста, обратитесь к полному ответу. – vrluckyin

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