【问题标题】:Count non null values in multiple columns with LINQ使用 LINQ 计算多列中的非空值
【发布时间】:2015-08-25 20:46:13
【问题描述】:

以下 SQL 查询计算一个单个查询中多列的非空值(如this answer):

SELECT COUNT(Id) AS Total,
    COUNT(Column_1) AS Column_1_Non_Null_Count,
    COUNT(Column_2) AS Column_2_Non_Null_Count,
    COUNT(Column_3) AS Column_3_Non_Null_Count,
    ...
FROM MyTable

是否有对应的 Linq 查询执行类似于此的 SQL 查询(每个列计数没有子查询)?

计算空值而不是非空值也可以。

【问题讨论】:

    标签: sql sql-server linq entity-framework entity-framework-6


    【解决方案1】:

    我不确定是否存在使用 Entity Framework 执行此操作的好方法,我认为使用原始 sql 执行此操作更好。

    但假设您想使用 Entity Framework 执行此操作,一种方法可能是使用来自 EF.Extended 库的 FutureCount 方法创建多个查询。使用 EF.Extended 中的 Future 方法,所有查询都被推迟,直到访问其中一个查询的结果,并且数据将在一次往返数据库服务器中检索。

    var queryColumn1 = MyDBContext.MyTable.Where(q => q.Column1 == null).FutureCount();
    var queryColumn2 = MyDBContext.MyTable.Where(q => q.Column2 == null).FutureCount();
    ...
    
    int countColumn1 = queryColumn1.Value;
    int countColumn2 = queryColumn2.Value
    

    我不喜欢这个解决方案的是代码的可读性,正如我所说,我认为好的方法是使用原始 sql 或使用存储过程

    【讨论】:

    • 我同意可读性。即使查询是在一次往返中执行的,它仍然意味着每列执行一个查询。目前我使用的是原始 sql/views,但我暂时不会接受这个答案,以防有人提出 EF 解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2014-07-27
    • 2021-11-05
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多