如何在EF中选择按日期分组的多个计数

hnd*_*ndr 2 c# entity-framework count linq-group

我有一张大致如下所示的表:

Date        | Category  | Name
01/02/2014  |    A      | Foo
01/02/2014  |    B      | Bar
02/02/2014  |    A      | Baz
02/02/2014  |    A      | Bla
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建一个生成如下内容的查询:

Date        | CategoryACount | CategoryBCount
01/02/2014  |       1        |      1
02/02/2014  |       2        |      0
Run Code Online (Sandbox Code Playgroud)

我目前有一个存储过程,它循环遍历日期并通过逐个查询数据来创建一个临时表,我们计划将所有应用程序逻辑移出存储过程。

如何在 EF 中生成此查询?

Jen*_*ter 5

如果你的桌子看起来像这样

public class Table
{
   public DateTime Date { get; set; }
   public string  Category { get; set; }
   public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你可以使用这样的 qry:

db.Table.GroupBy(c => c.Date)
        .Select(c => new 
                 {
                  Date = c.Key,
                  CatA = c.Where(q => q.Category == "A").Count(),
                  CatB = c.Where(q => q.Category == "B").Count(),
                  })
Run Code Online (Sandbox Code Playgroud)

要测试它 - 使用 LinqPad 并运行:

var lst = new List<Table>();

lst.Add(new Table(){Date = new DateTime(2014,2,1),Category = "A"});
lst.Add(new Table(){Date = new DateTime(2014,2,1),Category = "B"});
lst.Add(new Table(){Date = new DateTime(2014,2,2),Category = "A"});
lst.Add(new Table(){Date = new DateTime(2014,2,2),Category = "A"});


lst.GroupBy(c => c.Date)
   .Select(c => new {
         Date = c.Key,
         CatA = c.Where(q => q.Category == "A").Count(),
         CatB = c.Where(q => q.Category == "B").Count(),
          })
   .Dump();
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明