我有
dbContext.Items.FromSql("SELECT COUNT(*)
FROM Items
WHERE JSON_VALUE(Column, '$.json') = 'abc'")
这返回一个IQueryable
,我想知道如何返回标量int
吗?
答案 0 :(得分:2)
尝试
var firstElement = dbContext.Items
.FromSql (..)
.ToList
.First();
答案 1 :(得分:1)
最快的破解/解决方法是,如果您的Item类具有int / long属性(让我们说Id),则可以这样处理:
dbContext.Items.FromSql("SELECT COUNT(*) as Id
FROM Items
WHERE JSON_VALUE(Column, '$.json') = 'abc'").Select(x=>x.Id).First();
答案 2 :(得分:0)
您可以执行以下操作:
dbContext.Items.Count()
您始终可以在IQueryable上执行.Count()
函数
编辑: 当确实需要FromSql时,应该执行以下操作:
var count = context.Items.FromSql("Select count(*) from items").First();
答案 3 :(得分:0)
FromSQL有一些限制:
因此,请尝试以下操作:
var elements = dbContext.Items
.FromSql("SELECT * from dbo.Items")
.ToList();
var countOfElements = elements.Count();
答案 4 :(得分:0)
您应将 composable SELECT
SQL传递给FromSql
方法,例如SELECT *
-参见Raw SQL Queries。然后,您可以应用常规的LINQ Queryable
运算符,包括Count
:
var count = dbContext.Items
.FromSql("select * FROM Items Where JSON_VALUE(Column, '$.json') = 'abc'")
.Count();
答案 5 :(得分:0)
var count = dbContext.Set.FromSqlRaw(/* {raw SQL} */).Count();
将生成以下SQL
SELECT COUNT(*)::INT
FROM (
-- {raw SQL}
) AS c
其中{raw SQL}
的格式为
select count(*) from my_table where my_col_condition = true group by my_col_id
这样就可以在数据库端完美地完成计数工作,而无需在客户端上加载表行。
请注意不要以{raw SQL}
结尾;
。