2012-05-22 2 views
2

를 람다를 사용 및 취급 :Linq는이 SQL 합계 널 (null)

int query = (from f in odc.RDetails 
        where f.ticketID == int.Parse(ticket.ToString()) 
        select f).Sum(x => x.Rate); 



나는 다음과 같은 오류 얻을 :

널 (null) 값을 nullableable 값 형식 인 System.Int32 형식의 멤버에 할당 할 수 없습니다.

답변

2

. x.Rateint이고 int? (은 값으로 허용)이 아니어야합니다.

. 쿼리에 요소가 없으면 .Sum은 아무 작업도 수행하지 않고 null을 반환합니다. 기본값을 선택하십시오 (예 : 0).

var query = from f in odc.RDetails 
      where f.ticketID == int.Parse(ticket.ToString()) 
      select f; 

int result = query.Any() 
      ? query.Sum(x => x.Rate ?? 0) // use the ?? if x.Rate is an "int?". 
      : 0; // default value you can choose. 
+0

나는 연산자를 얻고있다 ?? int 및 int 유형의 피연산자에는 적용 할 수 없습니다. – InCode

+0

편집 된 답변을 확인하십시오. 이제 결과는 합계를 잡아 줄 것입니다! –

+0

'.Sum'은 질의에서 무효를 테스트 한 후에도 호출 될 수 있습니다. 새 편집 ... –

0

나는 디버깅에 대한 Linq에에서 해당 구문 분석을 분리하기 위해 자신의 라인 위에 int.Parse(ticket.ToString())을 깰 것이다.

예외를 던지고 있는지 여부 또는 RDetails.Rate 값 중 하나가 null인지 여부를 알 수 없습니다. 그것은 실제로 Nullable<int>입니까?

RDetails.RateNullable<int> 인 경우 ...Sum(x => x.Rate ?? 0) 일 수 있으며 예외는 없습니다.

+0

티켓이 전혀 null이 아닙니다 .... – InCode