當使用Linq中的拉姆達和使用下面的代碼到SQL:LINQ的2 SQL總和拉姆達和處理空值
int query = (from f in odc.RDetails
where f.ticketID == int.Parse(ticket.ToString())
select f).Sum(x => x.Rate);
我收到以下錯誤:
空值不能被分配給類型爲System.Int32的成員,這是一個非空值類型。
當使用Linq中的拉姆達和使用下面的代碼到SQL:LINQ的2 SQL總和拉姆達和處理空值
int query = (from f in odc.RDetails
where f.ticketID == int.Parse(ticket.ToString())
select f).Sum(x => x.Rate);
我收到以下錯誤:
空值不能被分配給類型爲System.Int32的成員,這是一個非空值類型。
。您必須確保x.Rate
是int
,而不是int?
(接受null
作爲值的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.
我會打破int.Parse(ticket.ToString())
到自己的線上,以隔離Linq進行調試的解析。
我們不知道這是拋出異常還是RDetails.Rate
值之一爲空。這確實是一個Nullable<int>
?
如果RDetails.Rate
是Nullable<int>
,那麼你可以...Sum(x => x.Rate ?? 0)
並避免例外。
票根本不爲空.... – InCode
我收到運營商?不能應用於int和int類型的操作數 – InCode
檢查編輯的答案。現在'結果'將持有這筆錢! –
在測試查詢中的無效性之後,也可以調用'.Sum'。新編輯... –