2011-04-15 94 views
11

我在嘗試獲取「預訂」的SUM,並收到錯誤「由於物化值爲null,所以轉換爲值類型'Int32'失敗。無論是結果類型的泛型參數還是查詢必須使用可空類型。「使用LINQ SUM時出現異常

var bookings = entities.Bookings.Where(x => x.ID == id && 
            x.StartDate <= bookingEnd && 
            x.EndDate >= bookingStart) 
            .Sum(x => x.BookingQuantity); 

我該如何解決這個問題?如果它沒有預訂,我需要得到0。

+0

同樣的問題在這裏:http://stackoverflow.com/questions/2076827/linq-error-generic-pa- ter----query-must-use-a-nullable-type – VikciaR 2011-04-15 10:18:46

回答

41

嘗試空合併運算符:

var bookings = entities.Bookings.Where(x => x.ID == id && 
           x.StartDate <= bookingEnd && 
           x.EndDate >= bookingStart && 
           x.BookingQuantity != null) 
           .Sum(x => (int?)x.BookingQuantity) ?? 0; 

或聲明的預訂作爲一個可空INT

詮釋?預訂= ...

編譯器類型推斷將Sum的結果作爲普通的int來提取,它不應該爲null。

+0

在我的情況下,它也返回int,而不是nullable int,這是沒有意義的。如何? 0修復它呢? – Zapnologica 2016-11-24 20:12:53

1

添加檢查null。

var bookings = entities.Bookings.Where(x => x.ID == id && 
            x.StartDate <= bookingEnd && 
            x.EndDate >= bookingStart && 
            x.BookingQuantity != null) 
            .Sum(x => x.BookingQuantity); 
+0

選擇*從預訂WHERE BookingQuantity IS NULL返回0行,所以如果有的話全部有1個或更多。 – 2011-04-15 09:58:03

15

This page建議解決此問題;

Sum(x => (int?)x.BookingQuantity) ?? 0; 
+0

我的編譯器拋出一個錯誤說'??不能應用於int' – Zapnologica 2016-11-24 20:19:31

+0

您是否將它投射到(in​​t?)? – 2016-11-25 20:43:35