2016-07-05 54 views
-2

我正在使用linq連接兩個表基於一定的標準,我有摘要和用戶表,在彙總表中我有兩列之一是isPaid(位)另一個是金額(十進制) 。我需要檢查isPaid列以在當前值數量列中添加以前的數值列。如果isPaid爲false,則需要將前一個金額列添加到當前金額欄中,否則不需要添加。 我已經試過此查詢以前的值檢查linq使用TakeWhile

var billData = (from summary in billingSummary 
       join userData in user on summary.parentId equals userData.ParentId 
       select new MonthlyBilling 
       { 
        billAmount = summary.billamount.ToString(), 
        paymentAmount = billingSummary.TakeWhile(x => (x.ispaid == false) ? (x.billamount + summary.billamount) : summary.billamount).ToString(), 
     }).ToList(); 

但我正在逐漸叫不能隱式轉換類型十進制在TakeWhile部分爲BOOL錯誤。我知道錯誤的含義是什麼,但是我在哪裏得到這個錯誤?有任何想法嗎?

+1

我不完全清楚你想要做什麼,購買你的隱式if語句試圖傳遞一個小數到TakeWhile,它期望一個bool。 – esmoore68

+1

'TakeWhile'需要一個返回'bool'的委託來指示何時停止接收序列中的項目。 – juharr

+0

所以我需要改變我的需求@juharr而不是使用TakeWhile,其他選項的邏輯? – Ranjith

回答

0

你TakeWhile期待從表達的boollean:

x => (x.ispaid == false) ? (x.billamount + summary.billamount) : summary.billamount 

該語句返回一個十進制值。這就是你得到錯誤的原因。

+0

如果您正在嘗試執行運行總計,我會執行以下操作:billingSummary.Where(x =>!x.ispaid).Aggregate((a,b)=> a.billamount + b.billamount)。邏輯和選擇可能需要爲您的目的而改變。 –