如何展平GroupBy并在linq中选择

时间:2015-05-06 12:51:04

标签: c# linq

我有一个返回一些分组数据的查询,而我正在绘制一个关于如何“展平”它的空白,以便在每个组中提供顶级信息。

Account A
    - Group A
    - Group B
    - Group C
    - etc

Account B
    - Group B
    - Group C

我想要做的就是将其“扁平化”为:

Account A | Group A | Sum(Group)
Account A | Group B | Sum(Group)
Account A | Group C | Sum(Group)
Account B | Group B | Sum(Group)
Account B | Group C | Sum(Group)

这是我到目前为止所做的,但我不确定该去哪里

var transactions = Accounts.Where(clause)
    .Select(x => new
    {
        Account = x,
        TransGroupedByBucket = x.TransactionLogs.GroupBy(tl => tl.TransactionType.BucketTypeID)
    })

    //pseudocode
    //Select  new {
    //   Account,
    //   One_TransactionLog_Group
    //}

    //will run for each group:
    .Select(x => new
    {
        AccountInfo = x.Account.ID
        Sum = One_TransactionLog_Group.Sum(tl => tl.Amount)
    })
    ;

我想我只是有一个大脑放屁,有人能指出我正确的方向吗?我的一个想法是将其翻转为TransactionLog级别并且遍历Account,但TransactionLog可能有0 Account个,因此可能不能正常工作。

1 个答案:

答案 0 :(得分:2)

您可以使用SelectMany

Accounts.SelectMany(x => x.TransactionLogs.
                           Select(y => new { Account = x.ID,
                                             TransactionLog = y,
                                             Sum = ... });