2011-11-03 1 views
6

나는 내가 합산 구매 금액보다 큰 합계 구매 0보다 큰 금액이있는 모든 제품을 검색하기 위해 노력하고 기본적으로Linq는이 같은 람다 합 SQL로 WHERE 조건

from p in _context.Products 
where p.Purchases.Sum(item => item.CCAmount) > 0 && p.Purchases.Sum(item => item.CCAmount) > p.PayOuts.Sum((item => item.AmountPaid) 
select p; 

다음 쿼리를이 우리가 지불 한 금액 (우리가 다른 사람을 대신하여 제품을 판매하고 전체 또는 일부를 지급에 하나를 지불하고 있습니다). 문제는 지불금 테이블에 항목이 특정 제품이없는 경우 그 제품은 결과 목록에 표시되지 않는다는 것입니다. 그러나 판매 대금 테이블에 판매 대금을 삽입하면 해당 상품이 상품 목록에 나타납니다. 그것의 거의 내가 여기서 뭔가를 놓치고 0 암으로 하나 즉 기대로 평가하지 않습니다 빈 컬렉션 합을 사용하는 경우로?

도움 주셔서 감사합니다.

+0

생성 된 SQL은 무엇 작성? – svick

답변

5

문제는 요약 할 기록이없는 경우 SQL에서 SUMnull를 반환한다는 것입니다.

당신은 약간의 속임수를해야합니다.

시도 :

((int?)p.PayOuts.Sum(item => item.AmountPaid)).GetValueOrDefault() 

또는 약간 다른 방식으로

((int?)p.PayOuts.Sum(item => item.AmountPaid) ?? 0) 
+0

+1; 하지만 두 번째 경우에는 외부 C#을 행복하게 만들기 위해 캐스트가 필요하다고 생각합니다 ...? –

+0

MerlynMorgan - 그레이엄 @, 당신 말이 맞아. –

+0

도움을 주셔서 감사합니다. 완벽하게 작동합니다. – Peuge