我想计算拥有所有者 (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
他们有更简单的方法吗?如何将其转换为 Linq2Sql?
谢谢。
最佳答案
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();
这只会发出一个查询,但它需要两次表扫描,因为 L2S 无法有效地转换它。
我们可以将其简化为一次表扫描:
var sums =
(from t in teams
group t by (t.User != 0) into g
select new { isUsedTeam = g.Key, Count = g.Count() }).ToList();
这将为您提供两行,一行用于 freeTeams,另一行用于 usedTeams。 令人讨厌,但使用 LINQ2SQL 是最快的方法。
关于.net - 如何计算满足和不满足条件的记录数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10246352/