2011-01-11 2 views
0

매개 변수가 null인지 아닌지는 모르겠지만 다음과 같은 방식으로 사용하고 싶습니다. Param! = null 인 경우 Param가 null의 경우는 id를 와 비교해, null와 비교한다. 그런Linq : 존재하지 않는 값을 비교해도 예외가 발생하지 않아야합니다.

뭔가 : 나는 C에서 뭔가 얻을려고으로 ParamCat가 곧 null의 경우

var c = from cat in context.Categories 
where ParamCat != null && cat.ParentId == ParamCat.Id 
|| 
ParamCat == null && cat.ParentId == null 
select c; 

(예를 c.Count를 들어()) 그것은 예외가 발생합니다.

보통 어떤 종류의 조건을 사용하면 특히 AND를 사용하면 조건이 실패하는 즉시 비교가 중지됩니다. 예를 들어이 코드는 예외를 발생시키지 않습니다.

if (ParamCat != null && cat.ParentId == RaramCat.Id) 
{ 
} 

그렇다면 위의 linq 코드가 예외를 throw하는 이유는 무엇입니까? (널 참조)

덕분에 당신은 그 순서대로 평가하기 위해 컴파일러를 얻기 위해 그룹에 괄호를 사용하여 && 표현을 필요

답변

1

:

var c = from cat in context.Categories 
where (ParamCat != null && cat.ParentId == ParamCat.Id) 
|| 
(ParamCat == null && cat.ParentId == null) 
select cat; 
+0

편집 권한이 없지만 "select c"가 아닌 "select cat"이어야합니다. – lukiffer

+0

@lukiffer : 실제로 그렇습니다. 그것이 유효성을 검사하지 않고 OP의 표현을 복사하여 붙여 넣기 위해 얻은 것입니다! –

+0

여기 내 작업 코드입니다 : var cc = context.Categories에서 orderby c.CategoryName where (ParentCategory! = null && c.CategoryParentId == 55) || (ParentCategory! = null && c.CategoryParentId == ParentCategory.CategoryId) // ParentCategory.CategoryId select c; 그 결과는 동일합니다. 왜 그럴 수 없습니까 ?? – mimic

0

시도 :

var c = from cat in context.Categories 
where (ParamCat == null && cat.ParentId == null) 
    || (ParamCat != null && cat.ParentId == ParamCat.Id) 
select cat; 

()은 큰 차이를 만들 수 있습니다. :)

+0

작동하지 않습니다 ... 여전히 null 참조 예외가 있습니다. ParamCat.Id를 특정 숫자 (심지어 존재하지 않는)로 변경하면 예외가 발생하지 않습니다. – mimic

관련 문제