2016-07-05 4 views
-2

Ich benutze linq um zwei Tabellen nach bestimmten Kriterien zu verbinden, ich habe Übersichts- und Benutzertabellen, in der Übersichtstabelle habe ich zwei Spalten eins isPaid (Bit) ein anderes ist Betrag (dezimal) . Ich muss die isPaid-Spalte für das Hinzufügen der vorherigen Wert Betrag Spalte in der aktuellen Wert Menge Spalte überprüfen. Wenn isPaid false ist, muss ich die vorherige Betragsspalte in die aktuelle Betragsspalte einfügen, sonst muss ich sie nicht hinzufügen. Ich habe diese Abfrage versuchtvorherige Werte check in linq mit 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(); 

aber ich erhalte die Störung genannt implizit NICHT TYPE DECIMAL CONVERT im Takewhile Teil nach BOOL. Ich weiß, was der Fehler bedeutet, aber wo bekomme ich diesen Fehler? irgendwelche Ideen?

+1

Im nicht ganz klar, was Sie versuchen zu tun, kaufen Sie Ihre implizite if-Anweisung versucht, eine Dezimalstelle an TakeWhile übergeben, die eine bool erwartet. – esmoore68

+1

'TakeWhile' erfordert einen Delegaten, der einen 'Bool'-Befehl zurückgibt, um anzugeben, wann die Aufnahme der Elemente in der Sequenz gestoppt werden soll. – juharr

+0

Also muss ich die Logik für meine Anforderung ändern @juharr statt TakeWhile, anyother Optionen? – Ranjith

Antwort

0

Ihre Takewhile erwartet ein boollean aus dem Ausdruck:

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

dass Anweisung gibt einen Dezimalwert. Deshalb erhalten Sie den Fehler.

+0

Wenn Sie versuchen, eine laufende Summe zu machen, würde ich etwas tun wie: billingSummary.Where (x =>! X.ispaid) .Aggregat ((a, b) => a.billamount + b.billamount). Die Logik und Auswahl muss möglicherweise für Ihren Zweck geändert werden. –