天天看點

EF中Sum()異常:到值類型“System.Decimal”的強制轉換失敗,因為具體化值為 null。

一、使用EF通路資料庫求和時經常遇到這樣的異常

“System.InvalidOperationException”類型的未經處理的異常在 EntityFramework.dll 中發生 

其他資訊: 到值類型“System.Decimal”的強制轉換失敗,因為具體化值為 null。結果類型的泛型參數或查詢必須使用可以為 null 的類型。

截圖:

EF中Sum()異常:到值類型“System.Decimal”的強制轉換失敗,因為具體化值為 null。

異常代碼1:

decimal sum = _member.DbSet
    .Where(q => q.MemberID == 11)
    .Sum(q => q.ActiveAmount);
           

異常代碼2:

decimal sum = _member.DbSet.Where(q => q.MemberID == 11)
    .Select(q => q.ActiveAmount)
    .Sum();
           

二、原因:

抛出的原因:根據條件從資料庫篩選出的資料為空,然後求和就抛出異常了。

解決方案:根據條件将篩選字段或資料行取到記憶體後,在求和

//将資料庫資料拿到記憶體再求和
decimal sum = _member.DbSet.Where(q => q.MemberID == 11)
    .Select(q => q.ActiveAmount)
    .ToList()
    .Sum();
           

解決方案2:如果根據條件當篩選資料行不存在時,求和結果需要指定為null時,可以這樣處理

decimal? sum = _member.DbSet
    .Where(q => q.MemberID == 11)
    .Sum(q => (decimal?)q.ActiveAmount);
           

解決方案3(推薦):使用DefaultIfEmpty()

http://blog.csdn.net/u011127019/article/details/61413670

更多:

EntiryFramework中事務操作執行個體

EntityFramework中JSON序列化循環引用----JavaScriptSerializer