若查詢結果沒有資料,直接Sum 會拋這個錯誤 (某種寫法才發生)
先 DefaultIfEmpty() 再 Sum() 可避免此問題 <= 效能差
Ex:
db.財會系統_帳戶資料期初.Where(a => a.公司id == id && a.id == 帳戶id && a.年度 == 期初日期.Year).DefaultIfEmpty().Sum(a => a.期初金額 ?? 0)
若先 ToList() 再 Sum() 可以避免錯誤,但查詢結果沒有資料時則結果會不如預期
Ex:
var list = db.傳票明細.Where(b => b.傳票.公司id == 公司id && b.沖帳發生 == true && b.金額 - b.沖銷.Where(c => c.沖帳發生 != true).ToList().Sum(c => c.金額) > 0)
b.沖銷.Where(c => c.沖帳發生 != true) 沒有資料的不會列出,推測是 b.沖銷.Where(c => c.沖帳發生 != true).ToList().Sum(c => c.金額) 被當作 null 處理
改用如下寫法則結果就會如預期
var list = db.傳票明細.Where(b => b.傳票.公司id == 公司id && b.沖帳發生 == true && b.金額 - (b.沖銷.Where(c => c.沖帳發生 != true).Sum(c => c.金額)??0) > 0)
若 c.金額 型態不可為null,則先強制轉型
var list = db.傳票明細.Where(b => b.傳票.公司id == 公司id && b.沖帳發生 == true && b.金額 - (b.沖銷.Where(c => c.沖帳發生 != true).Sum(c =>(decimal?)c.金額)??0) > 0)
訂閱:
張貼留言 (Atom)
input 連結 datalist 用程式控制彈出選項
範例: nextTick(() => document.querySelector('input').showPicker()); ※僅支援現代瀏覽器
-
1. 設定檔案下載儲存位置為 C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\Cache 2. 勾選"下載每個檔案前詢問儲存位置" 3. 針對不要下載的檔案類型於第一...
-
自動設定欄寬 sheet.Cells.AutoFitColumns(3, 20); // 必須設定 min 跟 max 才會正常作用 凍結欄位 sheet.View.FreezePanes(4, 4); 標題列 ws.PrinterSettings.RepeatRo...
-
使用 FreeSpire.XLS ... ep.Save(); using (var workbook = new Workbook()) using (var memStream = new MemoryStream()) { workbook.LoadFromSt...
沒有留言:
張貼留言