我目前通过这种方式获得2个聚合函数结果:
var fooCount = ctx.Foo.Count();
var barCount = ctx.Bar.Count();
这将生成两个不同的SQL查询。我正在寻找一种将这些组合成一个查询的方法。
在普通SQL中,我可以通过以下方式组合这两个查询:
SELECT
(SELECT COUNT(*) FROM Foo) AS FooCount,
(SELECT COUNT(*) FROM Bar) AS BarCount
我们如何使用实体框架来做到这一点?我所发现的只是同一个表中的多个聚合函数。但就我而言,这是不同的表格。
我尝试过这样的东西,但没有成功:
var query = from together in (new
{
FooCount = db.Foo.Count(),
BarCount = db.Bar.Count()
}) select together; //<-- visual studio let me not write "select together;"
我想你想要的是这样的东西。基本上,通过一个常量进行分组,可以将计数聚合为IQueryable<int>
,然后可以交叉连接它们。但我不知道这是否值得。基本上,你是在用可读性来换取性能的提升。
var counts = (from fc in (
from f in ctx.Foo
group f by 1 into fgrp
select fgrp.Count())
from bc in (
from b in ctx.Bar
group b by 1 into bgrp
select bgrp.Count())
select new { FooCount = fc, BarCount = bc }).Single();