2016-07-05 5 views
-2

linqを使用して特定の条件に基づいて2つのテーブルを結合しています。サマリーテーブルにサマリーテーブルとユーザーテーブルがあります。2つのカラムがあります(isPaid(bit) 。私は、現在の金額の列に前の金額の列を追加するために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 TO TYPEのDECIMALを変換することはできません取得しています。私はエラーの意味は何かを知っていますが、どこでこのエラーが発生していますか?何か案は?

+1

あなたがしようとしていることを完全にはっきりさせることはできません。あなたの暗黙のif文を買って、TakeWhileに小数点を渡そうとしています。 – esmoore68

+1

'TakeWhile'には、シーケンス内のアイテムの取得をいつ止めるべきかを示す' bool'を返すデリゲートが必要です。 – juharr

+0

私はTakeWhile、anyotherオプションを使用する代わりに、私の要件@juharrのロジックを変更する必要がありますか? – Ranjith

答えて

0

あなたTakeWhile式からboollean期待している10進値を返す文

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

を。それがエラーを起こす理由です。

+0

実行中の合計を実行しようとしている場合は、billingSummary.Where(x =>!x.ispaid).Aggregate((a、b)=> a.billamount + b.billbount)のような処理を行います。あなたの目的に合わせてロジックと選択を変更する必要があるかもしれません。 –

関連する問題