results = results.Where(x => x.SomeValue ?? 0 == 0);
값이 null인지, null인지 확인하려면 0으로 만들고 비교하십시오.?? 연산자 Lambda LINQ
나는
오류 메시지가) (여분의 괄호를 넣어하는 방법을 모른다 :
results = results.Where(x => x.SomeValue ?? 0 == 0);
값이 null인지, null인지 확인하려면 0으로 만들고 비교하십시오.?? 연산자 Lambda LINQ
나는
오류 메시지가) (여분의 괄호를 넣어하는 방법을 모른다 :
results = results.Where(x => (x.SomeValue ?? 0) == 0);
그러나 당신이 nullable 형식을 다루는 경우 내가 널 위해 더 많은 읽을 명시 적으로 확인 발견 :
results = results.Where(x => !x.SomeValue.HasValue || x.SomeValue == 0);
또 다른 옵션입니다 fo를 0을 반환합니다 GetValueOrDefault()
방법, R 정수 (긴, 바이트) :
results = results.Where(x => (x.SomeValue ?? 0) == 0);
하지만 당신은 할 수 있습니다
results = results.Where(x => x.SomeValue.GetValueOrDefault() == 0);
이 시도 ...
results = results.Where(x => (x.SomeValue ?? 0) == 0);
null 허용의 INT가 x.SomeValue
입니다 가정하면,이 작업을 수행 할 수 있습니다 null 값을 같은 유형의 값으로 "바꿉니다". 문자열이거나 다른 것 인 경우에는 작동하지 않습니다.
당신은뿐만 아니라 인라인 경우 연산자를 사용하여이 작업을 수행 할 수 있습니다 :
results = results.Where(x => x.SomeValue == null ? true : x.SomeValue == 0)
물론 Sergey가 언급했듯이 가독성이 중요합니다. 이들 중 어느 것도 명시 적 비교처럼 읽을 수 없습니다. –
당신은 널 (NULL)의 INT해야합니다이를 위해 입력 (INT를?).
results = results.Where(x => (x.SomeValue ?? 0) == 0);
감사합니다. 괄호를 어디에 넣어야할지 몰랐습니다. D –
필요한 것보다 더 많은 괄호를 넣고 작동이 멈출 때까지 제거하십시오. 시험하기에 충분히 간단합니다. – Servy
null-coalescing으로 인해 많은 문제가 발생하는 경우 null을 확인하는 것이 가장 좋은 이유는 무엇입니까? '(x => x == null || x == 0)'? 나는 그 의도가 분명하다고 주장 할 것이다. –