在列表内的列表中搜索元素

时间:2018-08-29 09:54:41

标签: c# asp.net asp.net-mvc list linq

我正在使用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()))
             );

请帮助我,我们将不胜感激。

1 个答案:

答案 0 :(得分:3)

Any是您要寻找的。它返回:

  

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>