IQueryable.Where предложение И не работает с несколькими параметрами поиска - PullRequest
0 голосов
/ 22 ноября 2011

У меня проблема с получением множественного поиска, работающего с предложением IQueryable.Where с использованием оператора AND.Я знаю, что проблема в том, что когда параметр пуст или равен нулю, он ищет «» с другим параметром и не возвращает результаты, но я не хочу проходить расширенное и смешное вложение, если проверять наличие нулей илизаготовки по 8 параметрам.Я гуглил это в течение нескольких дней, ИЛИ, очевидно, работает, но условие И ничего не возвращает.

albums = albums.Where(a => a.CA_AlbumName.ToUpper().Contains(searchName.ToUpper()) && 
                           a.CA_AlbumURL.ToUpper().Contains(searchURL.ToUpper()));

Выше работает, если оба параметра не пустые, но ничего не возвращает, если один из них.Я попытался построить где на основе не нуль, как показано ниже, но те же результаты:

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

1 Ответ

5 голосов
/ 22 ноября 2011

Если я правильно понимаю ваше требование, должно сработать следующее:

  albums = albums.Where(a => 
      (
          string.IsNullOrEmpty(searchName) || 
          a.CA_AlbumName.ToUpper().Contains(searchName.ToUpper())
      ) && 
      (
          string.IsNullOrEmpty(searchURL) || 
          a.CA_AlbumURL.ToUpper().Contains(searchURL.ToUpper())
      )
  );

@ Джеймс прав.Обновленный код здесь:

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