2010-03-02 39 views
8

Tôi đang tạo phương thức thu thập tổng cộng lũy ​​kế trong suốt tháng. Vấn đề là có thể không có chi phí cho một số mặt hàng trong một tháng nhất định nên không có hàng nào được trả lại.LINQ to Sql Sum không có hồ sơ

tôi có thể xem làm thế nào điều này sẽ báo lỗi không có dữ liệu:

double fuelCost = (double)(from a in db.EquipmentFuelLogs 
          where a.wdEquipmentMainGeneralOID == vehicleKey &&  
           (monthBeginDate < a.Date1 && a.Date1 < monthEndDate) 
          select a.TotalCost).Sum(); 

phương pháp tốt nhất để phát hiện không có giao dịch nhiên liệu cho tháng đó và thiết lập các chi phí nhiên liệu đến 0 là gì? Chỉ cần làm một thử bắt? This article nói về vấn đề nhưng không có giải pháp.

+1

thấy http://stackoverflow.com/a/2456670/463425 .Chọn (a => (double) a.TotalCost?) .Sum(); – tkerwood

Trả lời

-10

Tôi đã thêm một lỗi để bắt lỗi. Tôi không bao giờ tìm thấy một giải pháp khác.

15

Vấn đề là vì nơi không trả về chuỗi nào cho phép tổng không thể hoạt động, tuy nhiên nếu bạn sử dụng .DefaultIfEmpty trước khi số tiền hoạt động tốt.

decimal? orderValue = 
    orders.Where(ee => ee.Name == "SomeName").DefaultIfEmpty().Sum(s => s.OrderCost); 

Hy vọng điều này sẽ hữu ích.

+0

Tôi sẽ thử lần sau tôi cần thực hiện việc này. –

+3

Không hoạt động với LINQ to SQL – jeromeyers

5

tôi giải quyết:

decimal orderValue = orders.Where(ee => ee.Name == "SomeName").Sum(s => (decimal?)s.OrderCost)??0;