2015-08-11 2 views
0

Использование C# У меня есть следующие DictionaryУплотненный LINQ для словаря

Dictionary<MyClass, List<MyOtherClass>> myDictionary; 

Я пытаюсь написать запрос LINQ, который будет выбирать каждый экземпляр MyOtherClass внутри каждого ключевого значения моего Dictionary. До сих пор у меня есть следующие:

var whatImLookingFor = myDictionary.SelectMany(x => x.Value).Select(y => y.myProperty == someCompareValue); 

компилируется и работает, но whatImLookingFor не кажется, чтобы быть в состоянии быть отлиты в коллекцию MyOtherClass объектов. Если я попытаюсь это сказать, я пытаюсь преобразовать из bool в MyOtherClass.

Есть ли специальный способ обработки вложенных LINQ запросов при работе с Dictionaries?

+0

Возможно, вы имели в виду Where вместо Select? –

+0

Вы имеете в виду 'Where' not' Select' правильно? – Eser

ответ

2

Вы фактически выбираете выражение bool из каждой записи. Я думаю, что вы имеете в виду Where вместо Select так:

var whatImLookingFor = myDictionary.SelectMany(x => x.Value) 
            .Where(y => y.myProperty == someCompareValue); 
0

Вы хотели бы использовать Where, а не Select и даже не нужен SelectMany - Вы могли бы просто написать:

var whatImLookingFor = myDictionary.Values.Where(y => y.myProperty == someCompareValue); 

Надеюсь, что это поможет!

2

Как уже упоминалось, вы выбираете список bools, делая это; вы эффективно выбираете результат тестирования каждого значения в списках против someCompareValue в том порядке, в котором словарь перечисляет пары значений ключа.

Вы можете использовать, где вместо второго выбрать. Это немного более многословно, но я склонен найти linq этой формы более удобной в обслуживании, когда запросы усложняются:

var whatImLookingFor = from kvp in myDictionary 
          from v in kvp.Value 
          where v.myProperty == someCompareValue 
          select v; 
Смежные вопросы