LINQ Group по итоговым и итоговым суммам - PullRequest
0 голосов
/ 19 июня 2010

У меня есть Batch с BatchItems, введенным несколькими пользователями. Я пытаюсь получить не только промежуточный итог на пользователя для одной партии, но и общую сумму для той же партии независимо от группировки пользователей. Это последняя часть, которую я не могу понять. Как я могу получить эту сумму, чтобы вернуть ее в виде списка?

from b in context.BatchItem
    where b.BatchId == batchId
    group b by b.CreatedByUser into g
    select new
    {
        BatchName = g.FirstOrDefault<BatchItem>().Batch.Name,
        User = g.Key,
        UserBatchCount = g.Count<BatchItem>(),
        // something like this is what I can't figure out
        TotalBatchCount = b.Count<BatchItem>()
    }

Ответы [ 2 ]

0 голосов
/ 19 июня 2010
        var batch1 = new { Name = "Batch A", BatchId = 1, CreatedByUser = "David" };
        var batch2 = new { Name = "Batch A", BatchId = 1, CreatedByUser = "Mike" };
        var batch3 = new { Name = "Batch B", BatchId = 2, CreatedByUser = "Cathy" };
        var batch4 = new { Name = "Batch B", BatchId = 2, CreatedByUser = "Cathy" };
        var batch5 = new { Name = "Batch B", BatchId = 2, CreatedByUser = "David" };
        var batch6 = new { Name = "Batch C", BatchId = 3, CreatedByUser = "Henry" };
        var batchItem = new[] { batch1, batch2, batch3, batch4, batch5, batch6 }.ToList();


        var result =
        batchItem.Where(b => b.BatchId == batchId)
                 .GroupBy(b => b.BatchId, b => b)
                 .SelectMany(g =>
                        g.GroupBy(c => c.CreatedByUser, c => c)
                         .SelectMany(sg =>
                                            sg.Select(c => new
                                            {
                                                BatchName = g.First().Name,
                                                UserName = c.CreatedByUser,
                                                UserBatchCount = sg.Count(),
                                                TotalBatchCount = g.Count()


                                            })
                                    )

                  );

Журнал аудита: удалены два предыдущих блока кода.

0 голосов
/ 19 июня 2010

Не уверен, но попробуйте это:

from b in context.BatchItem
let cnt = context.BatchItem.Count()
b.BatchId == batchId
group b by b.CreatedByUser into g
select new
    {
        BatchName = g.FirstOrDefault<BatchItem>().Batch.Name,
        User = g.Key,
        UserBatchCount = g.Count<BatchItem>(),
        // something like this is what I can't figure out
        TotalBatchCount = cnt
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...