Поиск элемента в списке внутри списка - PullRequest
0 голосов
/ 29 августа 2018

Я использую запрос Linq для поиска, у меня есть список productList, в котором я ищу некоторые данные, и часть из этого, у меня есть другой список IQProductSkuList в списке выше.

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

Невозможно неявно преобразовать тип 'System.Linq.Iqueryable' в bool

Невозможно преобразовать лямбда-выражение в намеренный делегат, поскольку некоторые из возвращаемый тип в блоке неявно преобразуется в тип возвращаемого делегата

Вот мой код

Первый поиск в основном списке

 productList = productList.Where
       (x => 
            (x.ProductName ?? "").ToLower().Contains(searchingkey.ToLower().Trim())
         || (x.ProductAbbreviation ?? "").ToLower().Contains(searchingkey.ToLower().Trim())
         || (x.ProductDisplayName ?? "").ToLower().Contains(searchingkey.ToLower().Trim())
         || (x.DestinationName ?? "").ToLower().Contains(searchingkey.ToLower().Trim())
         || (x.DestinationCityName ?? "").ToLower().Contains(searchingkey.ToLower().Trim())
        );

Работает нормально, но при поиске по списку внутри productList выдает ошибку.

Вот код для поиска по списку внутри списка, который выдает исключение.

productList = productList.ToList().Where(x => x.IQProductSkuList.Where
             (
                 x => (x.SKUCode ?? "").ToLower().Contains(searchingkey.ToLower().Trim()))
             );

Пожалуйста, помогите мне, любая помощь будет оценена ..

1 Ответ

0 голосов
/ 29 августа 2018

Любой - это то, что вы ищете. Возвращает:

true если исходная последовательность содержит какие-либо элементы; в противном случае false.

productList = productList.ToList().Where(x => x.IQProductSkuList.Any
                  (
                    x => (x.SKUCode ?? "").ToLower().Contains(searchingkey.ToLower().Trim())
                  ));

На самом деле Где метод требует его. Если вы заглянете в документацию, то увидите, что он ожидает такой тип параметра:

предикат
Func<TSource,Boolean>
Функция для проверки каждого элемента на условие.

Это означает, что вход функции имеет тип TSource, а возвращаемое значение должно быть типа Boolean.

Тип возврата Any соответствует этому:

Возвращает
Boolean

вашей проблемой было несоответствие из-за возвращаемого значения метода Where:

Возвращает
IEnumerable<TSource>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...