C#Linq GroupBy和Count字段

时间:2015-07-21 18:43:41

标签: c# linq

我需要按记录日期对某些数据进行分组,计算字段tipoEscola中值的出现次数,此字段的值可以是1或2,并且我还需要该分组日期的记录总数和tipoEscola的每个值。对不起,我知道这有点令人困惑,所以我将使用我拥有的数据显示它....

这些是我的数据库的一些记录:

nome    email               tipoEscola          dataCadastro
teste1  email@email.com         2           2015-07-16 10:29:34.140
teste1  email@email.com         1           2015-07-16 10:29:34.140
teste2  email@email.com         2           2015-07-16 10:31:55.337
teste3  email@email.com         2           2015-07-16 12:38:22.403
teste4  email@teste.com         1           2015-07-17 13:33:26.973
teste5  teste@teste.com         2           2015-07-17 13:49:13.850

这是我到目前为止所做的事情:

[0] { Data = {16/07/2015 10:29:34}, Tipo = 2, Qntd = 1 }
[1] { Data = {16/07/2015 10:29:34}, Tipo = 1, Qntd = 1 }
[2] { Data = {16/07/2015 10:31:55}, Tipo = 2, Qntd = 1 }
[3] { Data = {16/07/2015 12:38:22}, Tipo = 2, Qntd = 1 }
[4] { Data = {17/07/2015 13:33:26}, Tipo = 1, Qntd = 1 }
[5] { Data = {17/07/2015 13:49:13}, Tipo = 2, Qntd = 1 }

但这就是我想要实现的目标:

[0] { Data = {16/07/2015}, Tipo1 = 1, Tipo2 = 3, Qntd = 4 }
[1] { Data = {17/07/2015}, Tipo1 = 1, Tipo2 = 1, Qntd = 2 }

这是我用来分组的代码:

var leadsPorTipo = db.Lead_SejaEscola.Where(x => EntityFunctions.TruncateTime(x.dataCadastro) >= dataInicio && EntityFunctions.TruncateTime(x.dataCadastro) <= dataFim)
       .GroupBy(n => new { n.dataCadastro, n.tipoEscola })
       .Select(n => new { Data = n.Key.dataCadastro, Tipo = n.Key.tipoEscola, Qntd = n.Count() });

这是我用来格式化日期的代码:

var chartData = leadsPorTipo.AsEnumerable()
      .Select(x => new {
                  data = x.Data.ToString("dd/MM/yy"),
                  tipo = x.Tipo,
                  quantidade = x.Qntd });

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法吗?

var leadsPorTipo =
  db.Lead_SejaEscola.Select(x => new { Data = EntityFunctions.TruncateTime(x.dataCadastro),
                                       Tipo = x.tipoEscola })
                    .Where(x => x.Data >= dataInicio && x.Data <= dataFim)
                    .GroupBy(x => x.Data)
                    .Select(g => new { Data = g.Key,
                                       Tipo1 = g.Where(x => x.Tipo == 1).Count(),
                                       Tipo2 = g.Where(x => x.Tipo == 2).Count(),
                                       Qntd = g.Count() })
                    .ToList()