实体框架代码优先执行标量值函数

时间:2014-06-03 01:47:07

标签: c# entity-framework code-first

如何首先使用代码执行标量函数?下面是我尝试但只返回查询本身,而不是返回值。

using (var dbContext = new FTTRContext())
        {

            queryResult =
                dbContext.Database.SqlQuery<string>("SELECT [dbo].[ufnGetTotalUsers] (GETDATE())").ToString();
        }

1 个答案:

答案 0 :(得分:37)

SqlQuery返回DbRawSqlQuery的实例。这个类是一个可枚举的,它希望你通过标准的LINQ运算符或foreach等来枚举它。.ToString()在这个对象上只返回将被执行的查询。要获得所需结果,请使用.Single().SingleAsync()

queryResult = dbContext.Database
    .SqlQuery<string>("SELECT [dbo].[ufnGetTotalUsers] (GETDATE())")
    .Single();

这应返回您要查找的标量字符串结果。

话虽如此,您的查询看起来像无效的SQL。你只是想从SQL Server中获取日期吗?如果是,则查询可能应为SELECT GETDATE()。执行此操作后,您可能必须使用.SqlQuery<DateTime>(),因为该值的类型不是字符串。