2011-11-22 1 views
0

AND 연산자를 사용하여 IQueryable.Where 절을 사용하여 다중 검색을 수행하는 데 문제가 있습니다. 나는 문제가 매개 변수가 공백이거나 다른 매개 변수를 사용하여 결과를 반환하지 않는 null 인 것을 알고 있지만 nulls 또는 null을 확인하려면 확장되고 엄청나게 중첩되어 있어야합니다. 8 개의 매개 변수에 공백이 있습니다. 난 며칠 동안이 봤어, OR 분명히 작동하지만 AND 조건은 아무것도 반환합니다.IQueryable.Where 절이 여러 검색 매개 변수로 작업하지 않습니다.

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

답변

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

나는 아래와 같이 null이 아닌 기반으로하지만, 같은 결과가 어디 구축 시도 @ 제임스가 맞습니다. 업데이트 된 코드는 다음과 같습니다.

+1

+1 아마 문자열의 결과를 저장할 것입니다 .IsNullOrEmpty()가 어딘가에 있으므로 매번 평가되지는 않지만 작동하지 않으면 안됩니다. –

+0

@ JamesD'Angelo 잔인한 진실! 답변을 업데이트했습니다. – tugberk

+0

하! 누군가가 자신의 프로젝트에 "마법의 해결책"을 잘라내어 붙여 넣기로 결정한 경우를 대비하여 게시하고 싶었습니다. 좋은 대답과 업데이트. –

관련 문제