第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

轉換為值類型“Int32”失敗,因為實現(xiàn)值為null

轉換為值類型“Int32”失敗,因為實現(xiàn)值為null

夢里花落0921 2019-08-12 17:08:12
轉換為值類型“Int32”失敗,因為實現(xiàn)值為null我有以下代碼。我收到錯誤:“轉換為值類型'Int32'失敗,因為具體化值為null。結果類型的泛型參數(shù)或查詢必須使用可空類型?!碑擟reditHistory表沒有記錄時。var creditsSum = (from u in context.User                   join ch in context.CreditHistory on u.ID equals ch.UserID                                                           where u.ID == userID                  select ch.Amount).Sum();如何修改查詢以接受空值?
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

linq-to-sql查詢不是作為代碼執(zhí)行,而是轉換為SQL。有時,這是一種“漏洞抽象”,會產生意外行為。

一個這樣的情況是空處理,其中在不同的地方可能存在意外的空值。...DefaultIfEmpty(0).Sum(0)可以幫助這個(非常簡單)的情況,其中可能沒有元素和sql的SUM返回,null而c#期望0。

更通用的方法是使用在生成的SQL返回意外的null的風險時??將其轉換為COALESCE

var creditsSum = (from u in context.User
              join ch in context.CreditHistory on u.ID equals ch.UserID                                        
              where u.ID == userID              select (int?)ch.Amount).Sum() ?? 0;

這首先強制int?告訴C#編譯器這個表達式確實可以返回null,即使Sum()返回一個int。然后我們使用普通??運算符來處理這個null案例。

根據(jù)這個答案,我寫了一篇博文,其中詳細介紹了LINQ to SQL和LINQ to Entities。


查看完整回答
反對 回復 2019-08-12
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

要允許可空Amount字段,只需使用null合并運算符將空值轉換為0。

var creditsSum = (from u in context.User
              join ch in context.CreditHistory on u.ID equals ch.UserID                                        
              where u.ID == userID              select ch.Amount ?? 0).Sum();


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 1673 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號