2017-02-22 2 views
0

Я пытаюсь выполнить вложенный GroupBy с использованием Linq, и я не могу заставить его работать. Мой код выглядит следующим образом:Вложенный GroupBy с использованием 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() 
     }; 

Первый GroupBy работает правильно, но когда я пытаюсь GroupBy поле ПАРТИЙ я получаю следующее сообщение об ошибке сборки:

Ошибка 76 Недопустимый анонимный тип член описатель , Члены анонимного типа должны быть объявлены с назначением членов, простым именем или доступом к члену.

подсвечивается Ошибка здесь:

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

Есть предложения?

+0

попробуйте '.GroupBy (b => new {BatchCode = b.BatchCode})' – slawekwin

ответ

2

Вы имеете в виду

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

Там нет необходимости создавать анонимный тип, если вы хотите сгруппировать только один собственности.


Если вам нужен анонимный тип, синтаксис будет

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

вы использовали другой оператор лямбда (b => new {b => b.BatchCode}) внутри анонимного типа, который был недействительным.

+0

благодарим за ответ! – Jason

Смежные вопросы