从 EF Core 中的 ExecuteSqlRaw 获取返回值

Ste*_*ven 4 entity-framework entity-framework-core

我有一个非常大的表,我正在尝试获取其行数。使用COUNT(*)太慢,所以我想使用 EF Core 运行此查询:

int count = _dbContext.Database.ExecuteSqlRaw(
                "SELECT  Total_Rows = SUM(st.row_count) " +
                "FROM    sys.dm_db_partition_stats st " +
                "WHERE   object_name(object_id) = 'MyLargeTable' AND(index_id < 2)");
Run Code Online (Sandbox Code Playgroud)

唯一的问题是返回值不是查询结果,而是返回的记录数,只有1

有没有办法在这里获得正确的值,或者我需要使用不同的方法?

Dav*_*oft 6

由于您只需要一个标量值,您还可以使用输出参数来检索数据,例如

                var sql = @"
SELECT @Total_Rows = SUM(st.row_count) 
FROM    sys.dm_db_partition_stats st 
WHERE   object_name(object_id) = 'MyLargeTable' AND(index_id < 2)
";
                var pTotalRows = new SqlParameter("@Total_Rows", System.Data.SqlDbType.BigInt);
                pTotalRows.Direction = System.Data.ParameterDirection.Output;
                db.Database.ExecuteSqlRaw(sql, pTotalRows);

                var totalRows = (long?)(pTotalRows.Value == DBNull.Value ? null:pTotalRows.Value) ;
Run Code Online (Sandbox Code Playgroud)