IQueryable.Where子句并且不使用多个搜索参数

use*_*406 0 asp.net-mvc search iqueryable where-clause

我遇到了使用AND运算符使用IQueryable.Where子句进行多重搜索的问题.我知道问题是当一个参数为空或者为null时,它正在搜索带有另一个参数的""并且没有返回结果但是我不想通过扩展和可笑的嵌套if来检查空值或者8个参数的空白.我用谷歌搜索了几天,OR显然有效,但AND条件没有返回任何内容.

albums = albums.Where(a => a.CA_AlbumName.ToUpper().Contains(searchName.ToUpper()) && 
                           a.CA_AlbumURL.ToUpper().Contains(searchURL.ToUpper()));
Run Code Online (Sandbox Code Playgroud)

如果两个参数都不是空白,则上述方法有效,但如果其中一个参数不是,则返回任 我已经尝试构建基于非null的where,如下所示,但结果相同:

if (!String.IsNullOrEmpty(searchName))
{
    albums = albums.Where(a => a.CA_AlbumName.ToUpper().Contains(searchName.ToUpper()));
}
if (!String.IsNullOrEmpty(searchURL))
{
    albums = albums.Where(a => a.CA_AlbumURL.ToUpper().Contains(searchURL.ToUpper()));
}    
Run Code Online (Sandbox Code Playgroud)

tug*_*erk 5

如果我理解你的要求是正确的,那么下面的一个应该有效:

  albums = albums.Where(a => 
      (
          string.IsNullOrEmpty(searchName) || 
          a.CA_AlbumName.ToUpper().Contains(searchName.ToUpper())
      ) && 
      (
          string.IsNullOrEmpty(searchURL) || 
          a.CA_AlbumURL.ToUpper().Contains(searchURL.ToUpper())
      )
  );
Run Code Online (Sandbox Code Playgroud)

@James是对的.更新的代码在这里:

  var isSearchNameNullOrEmpty = string.IsNullOrEmpty(searchName);
  var isSearchURLNullOrEmpty = string.IsNullOrEmpty(searchURL);    

  albums = albums.Where(a => 
      (
          isSearchNameNullOrEmpty || 
          a.CA_AlbumName.ToUpper().Contains(searchName.ToUpper())
      ) && 
      (
          isSearchURLNullOrEmpty || 
          a.CA_AlbumURL.ToUpper().Contains(searchURL.ToUpper())
      )
  );
Run Code Online (Sandbox Code Playgroud)