2017-02-22 5 views
0

Ich versuche, eine verschachtelte GroupBy mit Linq durchzuführen und ich bin nicht in der Lage, es zur Arbeit zu bekommen. Mein Code ist folgende:Verschachtelte GroupBy mit Linq

var summaryFile = new RemittanceCenterFilesSummaryListModel 
     { 
      RemittanceFilesSummary = remittanceCenterSummaryListModel.RemittanceBatchSummaryRecord.GroupBy(x => new { x.FileId, x.SourceFileName }) 
       .Select(x => new RemitanceCenterFileSummarizedModel 
       { 
        FileId = x.Key.FileId, 
        SourceFileName = x.Key.SourceFileName, 
        Batches = x.ToList().GroupBy(b => new { b => b.BatchCode }) 
         .Select(c => new RemittanceCenterBatchSummarizedModel 
         { 
          FileId = x.Key.FileId, 
          SourceFileName = x.Key.SourceFileName, 
          BatchCode = c.Key, 
          BatchType = c.Key, 
          DetailRecordCountAdc = x.Count(y => y.BillingSystemCode == BillingSystemCode.Adc), 
          DetailRecordCountNotAdc = x.Count(y => y.BillingSystemCode == BillingSystemCode.Exceed), 
          AmountAdc = x.Where(y => y.BillingSystemCode == BillingSystemCode.Adc).Sum(y => y.PaymentAmount), 
          AmountNotAdc = x.Where(y => y.BillingSystemCode == BillingSystemCode.Exceed).Sum(y => y.PaymentAmount), 
          AmountTotal = x.Sum(y => y.PaymentAmount), 
         }); 
        ScannedBatchCount = x.Count(y => y.BatchType == "S"), 
        ScannedBatchAmount = x.Where(y => y.BatchType == "S").Sum(y => y.PaymentAmount), 
        NonScannedBatchCount = x.Count(y => y.BatchType != "S"), 
        NonScannedBatchAmount = x.Where(y => y.BatchType != "S").Sum(y => y.PaymentAmount), 
       }).ToList() 
     }; 

Die erste GroupBy richtig funktioniert, aber wenn ich versuche, das Batches Feld GROUPBY Ich erhalte die folgenden Buildfehler:

Fehler 76 Ungültige anonymen Typ Mitglied declarator . Anonyme Member müssen mit einer Member-Zuweisung, einem einfachen Namen oder Member-Zugriff deklariert werden.

Der Fehler wird hier hervorgehoben:

Batches = x.ToList().GroupBy(b => new { b => b.BatchCode }) 

Irgendwelche Vorschläge?

+0

versuchen Sie '.GroupBy (b => neu {BatchCode = b.BatchCode})' – slawekwin

Antwort

2

Sie meinen

Batches = x.ToList().GroupBy(b => b.BatchCode) 

Es gibt keine Notwendigkeit, einen anonymen Typ zu erstellen, wenn Sie nur eine Eigenschaft gruppieren möchten.


Wenn Sie einen anonymen Typ benötigen, würde die Syntax sein

Batches = x.ToList().GroupBy(b => new { b.BatchCode }) 

Sie eine weitere Lambda-Operator verwendet (b => new {b => b.BatchCode}) innerhalb des anonymen Typ, der ungültig war.

+0

danke für die Antwort! – Jason