一、使用EF通路資料庫求和時經常遇到這樣的異常
“System.InvalidOperationException”類型的未經處理的異常在 EntityFramework.dll 中發生
其他資訊: 到值類型“System.Decimal”的強制轉換失敗,因為具體化值為 null。結果類型的泛型參數或查詢必須使用可以為 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