我有这个模型:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Nullable<bool> IsActive { get; set; }
}


我正在尝试计算这2个统计信息:

1)有效类别

2)无效类别

var query = context.Category.ToList();
var categoriesStats = (new
{
    active = query.Where(t => t.IsActive).Count(),
    inactive = query.Where(t => !t.IsActive).Count(),
});


是否可以在不加载所有类别数据然后计算活动和不活动统计信息的情况下执行此操作?

最佳答案

与多个聚合一样,您可以使用group by常量技术通过单个数据库查询获取结果。

另外,如果使用Sum(condition ? 1 : 0)而不是Count(condition)(或Where(condition).Count()),则可以获得更好的SQL翻译。

var categoriesStats = (
    from c in context.Category
    group c by 1 into g
    select new
    {
        active = g.Sum(e => e.IsActive == true ? 1 : 0),
        inactive = g.Sum(e => e.IsActive != true ? 1 : 0),
    }).FirstOrDefault();

关于c# - 如何在不加载表的所有数据的情况下计算事件和非事件统计信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39900196/

10-10 14:30