나는 다음과 같이 DB 테이블에 합성 쿼리를 작성하고자 : 빈 컬렉션에서 집계 연산자를 사용하여 Linq 예외를 피하는 방법은 무엇입니까?
Decimal sum = MyDataContext.MyTable.Where(el => el.Client == selectedClien).Sum(el => el.Value.GetValueOrDefault(0));
는 불행하게도에서 오류가 발생하면 절은 전혀 요소를 반환하지 곳. 사용하기 전에. 내가 몇 가지 요소가 있지만 결과 코드가 초기 코드와 추악한 지 확인해야합니다. try/catch 블록을 넣는 것이 좋은 해결책이라고 생각하지 마십시오.
다음 코드를 제안 할만한 것이 있습니까?
추가 좀 더 조사 후
if (MyDataContext.MyTable.Where(el => el.Client == selectedClien).Any())
sum = MyDataContext.MyTable.Where(el => el.Client == selectedClien).Sum(el => el.Value.GetValueOrDefault(0));
else sum = 0;
감사 필리포 : 컬렉션이 비어있을 때
이MyDataContext.MyTable.Where(el => el.Client == selectedClien).Sum(el => el.Value).GetValueOrDefault(0)
위의 코드는 잘 작동합니다. 내가 'GetValueOrDefault (0)'을 .Sum() 내부의 람다에 넣는 이유는 'Value'필드가 Decimal?이므로 null 일 수 있습니다. 일부 요소에 null 값이있는 경우를 아직 테스트하지 않았습니다.
요소가 없으면 Sum은 0을 반환합니다. Average와 같은 다른 연산자는 문제가있을 수 있지만 Sum은 괜찮을 것입니다 ... –
'Where = '뒤에'Value = 0'을 사용하여 더미 요소를 추가 할 수 있습니다. 합계는 변경되지 않지만 다른 요소가 없으면 '0'을 반환합니다. – phg
"불행히도 where 절이 아무런 원소도 반환하지 않으면 오류가 발생합니다."-이 오류에 대해 더 자세히 알려주십시오. – AakashM