【问题标题】:Nested GroupBy using Linq嵌套 GroupBy 使用 Linq
【发布时间】:2017-02-22 21:55:57
【问题描述】:

我正在尝试使用 Linq 执行嵌套 GroupBy,但无法使其正常工作。我的代码如下:

    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 Batches 字段时,我收到以下构建错误:

错误 76 无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问来声明。

错误在这里突出显示:

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

有什么建议吗?

【问题讨论】:

  • 试试.GroupBy(b => new { BatchCode = b.BatchCode })

标签: c# linq


【解决方案1】:

你是说

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

如果您只想按一个属性分组,则无需创建匿名类型。


如果你需要一个匿名类型,语法应该是

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

您在匿名类型中使用了另一个 lambda 运算符 (b => new {b => b.BatchCode}),这是无效的。

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2020-03-25
    相关资源
    最近更新 更多