单个查询中的EF多重聚合

meh*_*ran 3 entity-framework aggregate

我想根据不同的条件得到一组数:

 var invoices = new AccountingEntities().Transactions
 var c1 = invoices.Count(i=>i.Type = 0);
 var c2 = invoices.Count(i=>i.Type = 1);
 var c3 = invoices.Count(i=>i.Type = 2);
Run Code Online (Sandbox Code Playgroud)

如何在一次数据库往返中调用所有三个查询以提高性能?

Cra*_*ntz 7

当然,只需将您的三个计数包装在POCO或匿名类型中:

using (var invoices = new AccountingEntities())
{
    var c = (from i in invoices.Transactions
             select new 
             {
                 c1 = invoices.Count(i=>i.Type = 0),
                 c2 = invoices.Count(i=>i.Type = 1),
                 c3 = invoices.Count(i=>i.Type = 2)
             }).Single();           
}
Run Code Online (Sandbox Code Playgroud)

另外,正如我所示,处理你的上下文.

  • 小心这个查询,如果你的集合是空的,`Single()` 将导致异常。使用 `FirstOrDefault` 来防止这种情况发生。 (2认同)