使用LINQ计算多列中的非空值

时间:2015-06-10 14:17:31

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

以下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查询(每个列计数没有子查询)?

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

1 个答案:

答案 0 :(得分: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或使用存储过程