.net - 如何计算满足和不满足条件的记录数量

标签 .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

他们有更简单的方法吗?如何将其转换为 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/

相关文章:

c# - [Serializable] 是否适用于继承的类?

c# - Entity Framework 中每种类型的表流利映射

mysql - 为现有表添加自增ID?

c# - Linq-to-SQL 从变更集中删除

c# - 为什么 lambda 中的短路不起作用?

asp.net - WCF 服务绑定(bind)设置

c# - 如何获取 IObservable<IObservable<T>> 的最新变化事件?

mysql - 构建 SQL 查询来检索标记的项目

sql - 查找与现有主键不匹配的列

c# - 如何为属性定义别名