2014-04-17 4 views
1

Website 필드가 VarChar 인 mySQL 데이터베이스가 있습니다. 이러한 필드 중 일부는 데이터베이스에서 null이됩니다.Linq을 사용하여 null이 아닌 경우

데이터베이스 정보를 보내는 MVC 응용 프로그램이 있습니다.

색인 페이지에서 특정 열을 기준으로 필터링 할 수 있도록 필터를 설정하려고합니다. 이 작업을 수행하려면 Request.QueryString을 사용하고 있습니다.

switch (Request.QueryString["FilterOptionSelect"]) 
      { case "CountyName": 
        if (!string.IsNullOrEmpty(filteredText)) 
        { 
         filteredText = filteredText.ToUpper(); 
         var modelFiltered = from n in model 
               where n.CountyName.ToUpper().Contains(filteredText) 
               select n; 
         return View(modelFiltered); 
        } 
        break; 
       case "Website": 
        if (!string.IsNullOrEmpty(filteredText)) 
        { 
         filteredText = filteredText.ToUpper(); 
         var modelFiltered = from n in model 
              where n.CountyWebsite.ToUpper().Contains(filteredText) 
              select n; 
         return View(modelFiltered); 
        } 
        break; 

} 

유일한 문제는 웹 사이트의 경우입니다. 이 웹 사이트 사례의 배경에 Object reference not set to an instance of an object.이 나와 있습니다. 디버깅 할 때 내 모델은 null이 아닙니다 (130 개 이상의 항목이 있습니다 ... 일부는 웹 사이트 정보 및 일부는 웹 사이트 정보 없음).

나는 이미 동일한 문제가있는 Lambda 방법을 사용해 보았습니다. 나는 또한 where n.CountyWebsite.ToUpper().Contains(filteredText) && n.CountyWebsite != null을 사용해 보았는데 어느 것도 작동하지 않았다.

+0

요청 개체를 직접 사용하지 않는 것이 좋습니다. MVC는 이러한 세부 사항을 숨 깁니다. FilterOptionsSelect라는 속성 또는 메서드 매개 변수를 사용하여 모델을 만들면 MVC가 값을 밀어 넣습니다. MVC로 빌드 할 때 요청 또는 응답을 직접 사용하는 이유는 거의 없습니다. –

답변

1

두 번째 시도에서 올바른 길을 걷고 있었지만 명령문의 순서를 전환해야합니다.

where n.CountyWebsite != null && n.CountyWebsite.Contains(filteredText) 

그냥 다른 모든 & & 사업자처럼, 당신은 null이 어떤 웹 사이트를 평가 해하려는, 그래서 먼저 작동을하지 않습니다.

또한, EF에 자동으로 포함되므로 대소 문자를 구분하지 않으므로 ToUpper()가 필요하지 않습니다.

0

시도해보십시오. 해결 될 것으로 생각합니다.

!String.IsNullOrEmpty(n.CountyWebsite) && n.CountyWebsite.Contains(filteredText) 
관련 문제