2009-12-24 2 views
0

시스템 설치 프로그램에서 기본 태그 검색을 사용하는 경우 각 태그에는 범주 ID 필드가 있습니다. 일부 태그에는 카테고리가 없습니다.LINQ, 제목 일치 여부, 개체가 Null 인 경우 제외

그래서 내 방법에서는 목록에 들어가기 위해 범주를 정의하기 위해 문자열을 전달합니다.

public IQueryable<Tag> List(string category) 
{ 
//... 
} 

아무 것도 전달되지 않으면 카테고리가없는 태그를 반환하고 싶습니다. 나는이 같은 쿼리를 작성하는 경우이 (그렇지 않은 경우 하나가 null의 경우, 하나) 내가 모든 일에서이 작업을 수행 할 수 있는지 궁금 두 개의 쿼리가 필요합니다 다음 그러나 ...

return t from db.Tags 
     where t.Category == null 
     select t; 

를 작동 단순화를위한 쿼리.

if(name == null) 
    return t from db.Tags 
      where t.Category.Name == null 
      select t; 
else 
    return t from db.Tags 
      where t.Category != null && t.Category.Name == name 
      select t; 

그런 다음 필요한 DB 서버에 더 복잡한 쿼리를 실행하지 않으 :

현재 쿼리는 ...

return t from db.Tags 
     where t.Category.Name == name 
     select t; 
+0

'name'이 (가) null 인 경우 작동합니다. 왜'== null' 쿼리가 필요합니까? –

+0

아니요, 작동하지 않습니다. 나는 그런 식으로 시도했다. name가 null의 경우는, 객체를 null에 동일하게하는 것과 같은 것이 아닙니다. 대신에, null 객체 인 객체 자신의 이름을 취득하려고 시도해, 에러를 슬로우합니다. – Ciel

+0

어떤 종류의 오류/예외입니까? 그게 그냥 작동해야하기 때문에 무엇이 잘못 될지 아이디어를 얻으려면 .. –

답변

1
db.Tags 
.Where(t=> Category==null?t.Category==null:t.Category.Name==Category); 
0

나는이 최선의 방법이라고 생각합니다. 가능하면 2를 결합하면 조회에 이름에 대한 ISNULL 점검도 포함됩니다.

관련 문제