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?
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}结尾;。
你可以这样做:
dbContext.Items.Count()
.Count()你总是可以在 IQueryable 上执行一个函数
编辑:当确实需要 FromSql 时,类似这样的事情应该可以完成工作:
var count = context.Items.FromSql("Select count(*) from items").First();
Run Code Online (Sandbox Code Playgroud)