2013-09-25 3 views
1

드롭 다운 선택 목록을 사용하여 필터링하는이 linq 쿼리가 있습니다. 필터가 작동하지만, 도시가 null 인 테이블의 모든 필드를 선택하고 싶습니다. 이 기준은 빈 결과 집합을 제공합니다. 도시가없는 항목이 100 개 이상이므로 잘못되었습니다.linq을 사용하여 null 항목을 선택하십시오

내 모델이 있습니다

클래스 A에 대한
public class classA 
{ 
    public string city {get; set;} 
    public ClassB somethingfromClassB{get; set;}  
} 

public class classB 
{ 
    //get set methods here 
} 

컨트롤러는 다음과 같습니다

public class classA : controller 
{ 
    public actionresult index() 
    { 
     //everything here works except this linq gives me an empty result sets: 

     var a = db.classA.inlcude(t=>t.somethingfromClassB); 
     if(value =="") 
     { 
      a=db.classA.where(u=>u.city==null).inlcude(t=>t.somethingfromClassB); 
     } 
     return view(a.tolist()) 
    } 
} 
+1

데이터베이스에 ** city ** 유형은 무엇입니까? 그것은 nvarchar입니까? – Alireza

+1

'database'의'city' 필드가'null'이지만'empty'입니까? ** 실수로 ** 도시 필드를 "비어있는 것으로"저장할 수 있습니다. –

+0

도시가 nvarchar이고 서식을 제출할 때 빈 칸으로 두는 것이 허용됩니다. – NULL

답변

0

합니까 다음과 같이 변경 일 :

a=db.classA.where(u=>u.city == null || u.city == "").inlcude(t=>t.somethingfromClassB); 
+0

좋은 데뷔. –

+0

@HamletHakobyan 그는 EntityFramework를 사용하고 싶었습니다. String.IsNullOrEmpty를 사용하여 내 대답을 편집하여 null과 빈 문자열을 테스트했습니다. 문제는 아니지만이 시나리오에서 가장 분명한 실수를 계속 잡을 것입니다. – doorstuck

0

당신의 마음을 변경! 둘째, 다음 두 가지 경우를 모두 확인할 수 있습니다.

a= db.classA 
    .where(u=>String.IsNullOrEmpty(u.city)) 
    .inlcude(t=>t.somethingfromClassB); 
+0

@ doorstuck wrong answer를 (를) 복사했습니다. –

+1

@HamletHakobyan이 Linq 쿼리는 초보자조차도 모든 개발자가 작성하는 방법을 알고있는 무언가입니다. 우리 중 많은 사람들이 null과 empty에 대해 문자열을 검사하는 방법을 알고 있습니다. 이것은 어떻게 든 최상의 단일 방법입니다. 그러나 내가 게시 한 의견과 OP가 나에게 준 답변을 보았습니까? 이것은 문제를 해결하는 방법입니다. 나는 간단한 규칙을 따라 문제가 어디에 있는지 찾아 냈다. 우리는 스스로를 과시하기 위해 여기에 있지 않습니다. – Alireza

+0

Linq는 기술이 아닌 쿼리 언어입니다. OP가 사용하는 기술을 알고 있습니까? –

관련 문제