如何从FromSql获取计数?

cho*_*bo2 6 c# sql-server entity-framework-core ef-core-2.1

我有

dbContext.Items.FromSql("SELECT COUNT(*) 
                         FROM Items 
                         WHERE JSON_VALUE(Column, '$.json') = 'abc'")
Run Code Online (Sandbox Code Playgroud)

这将返回IQueryable,我想知道如何返回标量int

Ale*_*urt 5

自 2020 年 EF Core 3.1 起

var count = dbContext.Set.FromSqlRaw(/* {raw SQL} */).Count();  
Run Code Online (Sandbox Code Playgroud)

会生成如下SQL

SELECT COUNT(*)::INT
FROM (
    -- {raw SQL}
) AS c
Run Code Online (Sandbox Code Playgroud)

其中 的{raw SQL}形式为

select count(*) from my_table where my_col_condition = true group by my_col_id
Run Code Online (Sandbox Code Playgroud)

这样,计数工作就可以在数据库端完美完成,而无需在客户端加载表行。
注意不要以{raw SQL}结尾;


Wil*_*lie 0

你可以这样做: dbContext.Items.Count()

.Count()你总是可以在 IQueryable 上执行一个函数

编辑:当确实需要 FromSql 时,类似这样的事情应该可以完成工作:

var count = context.Items.FromSql("Select count(*) from items").First();
Run Code Online (Sandbox Code Playgroud)