【问题标题】:Entity Framework Code-First Execute Scalar-Valued Functions实体框架代码优先执行标量值函数
【发布时间】:2014-06-03 01:47:06
【问题描述】:
如何先使用代码执行标量函数?以下是我尝试过的,但只返回查询本身,而不是返回值。
using (var dbContext = new FTTRContext())
{
queryResult =
dbContext.Database.SqlQuery<string>("SELECT [dbo].[ufnGetTotalUsers] (GETDATE())").ToString();
}
【问题讨论】:
标签:
c#
entity-framework
code-first
【解决方案1】:
SqlQuery 返回DbRawSqlQuery 的实例。此类是可枚举的,它希望您通过标准 LINQ 运算符或通过foreach 等枚举它。此对象上的.ToString() 仅返回将被执行的查询。要获得您想要的结果,请使用.Single() 或.SingleAsync()。
queryResult = dbContext.Database
.SqlQuery<string>("SELECT [dbo].[ufnGetTotalUsers] (GETDATE())")
.Single();
这应该返回您正在寻找的标量字符串结果。
话虽如此,您的查询看起来像是无效的 SQL。您只是想从 SQL Server 获取日期吗?如果是这样,查询应该是SELECT GETDATE()。完成此操作后,您可能必须使用 .SqlQuery<DateTime>(),因为该值的类型不是字符串。