2009-07-01 3 views
7

Я пытаюсь использовать LINQ для извлечения некоторых данных из словаря.Использование Лямбда со словарями

Вышеуказанные строки, q1 и q2, приводят к ошибке компилятора.

error CS0742: A query body must end with a select clause or a group clause 

Как я могу использовать LINQ для поиска значений в словаре?

Спасибо,

Рик

ответ

24

Либо

var q1 = from obj in testDict.Values where obj == "Apple" select obj; 

или

var q1 = testDict.Where(p => p.Value == "Apple"); 
+1

Просто чтобы прояснить, почему это работает в том, что словарь действует как IEnumerable > –

+1

Второе выражение должно также иметь p.Value == «Яблоко», как р будет пара <,>. – Richard

+5

Те получат вам выражение, которое возвращает результат IEnumerable. Если вы действительно хотите фактический объект, вам нужно позвонить Single() или First() –

8

у вас есть дополнительный "из OBJ в" в своих заявлениях, которые не нужны. Либо удалите это, либо измените .Where на синтаксис запроса linq вместо синтаксиса метода.

var q1 = from obj in testDict.Values 
     where obj.Value == "Apple" 
     select obj;  
var q2 = testDict 
     .Where(p => p.Value == "Apple"); 
+0

Первое выражение должно также иметь p.Value == «Apple», поскольку p будет Пара <,>. – Richard

+3

Неверно, он выбирает из testDict.Values, который является IEnumerable . Он получил только KeyValuePairs, если бы он выбрал сам testDict. –