Можно ли использовать встроенную лямбду с методом Contains? - PullRequest
5 голосов
/ 24 мая 2011

Я хочу отфильтровать список с помощью FindAll

Если я напишу:

.FindAll(
    p => p.Field == Value && 
    p.otherObjList.Contains(otherObj));

все нормально, но если я напишу

.FindAll(
    p => p.Field == Value && 
    p.otherObjList.Contains(
        q => q.Field1 == Value1 && 
        q.Field2 == Value2));

Я получаю сообщение об ошибке синтаксиса C #: Неизвестный метод FindAll (?) Из .. otherObjList

Я не могу точно определить otherObj, потому что знаю только значения двух полей, Field1 и Field2.

Что я сделал не так? Что я могу сделать в этом случае?

1 Ответ

7 голосов
/ 24 мая 2011

Метод Contains() для большинства типов коллекций, а также для версии LINQ ожидает аргумент того же типа, что и коллекция, а не лямбда.

Похоже, вы просто пытаетесь проверить, есть лиТовар соответствует некоторому условию.Вы должны использовать метод Any().

.FindAll(p => p.Field == Value
           && p.otherObjList.Any(q => q.Field1 == Value1 && q.Field2 == Value2))
...