以下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查询(每个列计数没有子查询)?
计算空值而不是非空值也可以。
答案 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或使用存储过程