2011-11-03 24 views
6

Tôi có truy vấn sau đâyLINQ to SQL với lambda sum như một nơi mà điều kiện

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; 

Về cơ bản tôi đang cố gắng để lấy tất cả các sản phẩm có một số tiền mua hàng tổng hợp lớn hơn 0 và có tổng số tiền mua hàng lớn hơn số tiền chúng tôi đã thanh toán (chúng tôi đang bán sản phẩm thay mặt cho người khác và thanh toán cho họ toàn bộ hoặc một phần khoản thanh toán). Vấn đề là nếu không có mục nào trong bảng thanh toán cho một sản phẩm cụ thể thì sản phẩm đó không xuất hiện trong danh sách kết quả. Tuy nhiên, nếu tôi chèn khoản thanh toán vào bảng thanh toán thì sản phẩm đó sẽ xuất hiện trong danh sách sản phẩm. Nó gần như là nếu sử dụng tổng trên một bộ sưu tập trống sẽ không đánh giá như là một trong những mong đợi, tức là 0. Tôi có thiếu cái gì ở đây?

Cảm ơn sự giúp đỡ của bạn.

+0

SQL được tạo ra là gì? – svick

Trả lời

5

Vấn đề là SUM trong SQL trả về null nếu không có bản ghi nào để tổng hợp.

Bạn cần phải ăn gian một chút.

Hãy thử:

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

hoặc viết bằng một chút cách khác nhau

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

+1; Nhưng tôi nghĩ bạn vẫn cần dàn diễn viên cho trường hợp thứ hai để làm cho C# bên ngoài hạnh phúc ...? –

+0

@ MerlynMorgan-Graham, bạn nói đúng. –

+0

Cảm ơn sự giúp đỡ, hoạt động hoàn hảo. – Peuge