如何计算满足和不符合标准的记录数量

Bud*_*dda 2 .net sql linq-to-sql

我想计算拥有所有者(OwnerId!= 0)和数量没有(OwnerId == 0)的团队数量.

在纯SQL中,我只使用2个子查询使用单个查询:

select
    (SELECT COUNT(*) FROM teams WHERE User=0) AS FreeTeams,
    (SELECT COUNT(*) FROM teams WHERE User!=0) AS UsedTeams
Run Code Online (Sandbox Code Playgroud)

他们是更简单的方式吗?如何将其翻译成Linq2Sql?

谢谢.

usr*_*usr 5

var sums =
 (from t in teams
 group t by 0 into g
 select new { freeTeams = g.Count(p => p.User == 0), usedTeams = g.Count(p => p.User != 0) }).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

这将仅发出一个查询,但它需要两次表扫描,因为L2S无法有效地转换它.

我们可以将其归结为一个表扫描:

var sums =
 (from t in teams
 group t by (t.User != 0) into g
 select new { isUsedTeam = g.Key, Count = g.Count() }).ToList();
Run Code Online (Sandbox Code Playgroud)

这将为您提供两行,一行用于freeTeams,另一行用于usedTeams.讨厌,但LINQ2SQL可用的最快方式.