首页 > 解决方案 > 在列表中搜索列表中的元素

问题描述

我正在使用 Linq 查询进行搜索,我有一个列表productList,我在上面搜索一些数据,其中的一部分我在IQProductSkuList上面的列表中有另一个列表。

所以我必须将数据搜索到整个检索到的数据中,但是每当我要在另一个列表中的列表中找到它时,它会给出如下错误。

无法将类型“System.Linq.Iqueryable”隐式转换为 bool

无法将 lambda 表达式转换为预期委托,因为块中的某些返回类型不能隐式转换为委托返回类型

这是我的代码

首先搜索主列表

 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()))
             );

请帮助我任何形式的帮助将不胜感激..

标签: c#asp.netasp.net-mvclistlinq

解决方案


任何是您正在寻找的。它返回:

true如果源序列包含任何元素;否则,false

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

实际上Where方法要求它。如果您查看文档,那么您会看到它需要这种类型的参数:

谓词
Func<TSource,Boolean>
用于测试每个元素的条件的函数。

这意味着函数的输入是类型TSource,返回值必须是类型Boolean

Any匹配的返回类型:

退货
Boolean

由于方法的返回值,您的问题是不匹配Where

退货
IEnumerable<TSource>


推荐阅读