c# - FromSqlRaw 返回值

标签 c# sql-server entity-framework-core

我的任务是返回车龄超过三年的汽车数量

public IActionResult Report()
{
    var result = _context.Cars.FromSqlRaw("SELECT COUNT(*) from Car where (DATEDIFF(DAY, ReleaseDate, GetDate()) / 365.25) > 3");
    ViewBag.result = result;
    return View();
}

在花时间谷歌搜索和研究 Microsoft 文档后,我发现 FromSqlRaw会工作,但在网络表单中它返回 -1Microsoft.EntityFrameworkCore.Query.Internal.Entityqueryable<T> .

直接查询数据库会返回正确的值,即 1车。
FromSqlRaw 之后添加任何参数返回异常。

我只是没有得到或得到 ReleaseDate然后格式化和分割是不是太多了?

最佳答案

FromSqlRaw返回实体类型( Car ),这就是您遇到此问题的原因。它不会返回任意值(如 COUNT() 的结果)。来自 documentation (粗体我的):

Raw SQL queries can return regular entity types or keyless entity types that are part of your model.



您可以使用 EF.Functions.DateDiffDay 直接使用 LINQ 构建此查询和 Count .假设您的实体具有名为 ReleaseDate 的属性,这将如下所示:
var result = context.Cars.Where(
     c => EF.Functions.DateDiffDay(c.ReleaseDate, DateTime.Now) / 365.25 > 3
).Count();

或者更简洁:
var result = context.Cars.Count(
    c => EF.Functions.DateDiffDay(c.ReleaseDate, DateTime.Now) / 365.25 > 3
);

关于c# - FromSqlRaw 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62183759/

相关文章:

entity-framework - EF Core 无法翻译,将在本地进行评估

c# - 如何创建可以使用任何 Ef Core DbContext 的类库

c# 在循环中更改 sql 的参数

sql - 您可以从函数返回的表中挑选一个列值吗?

c# - EF 核心 Web API : foreign key validation

sql - 如何在 SQL 中使用选择查询生成 csv 文件

sql - 在 SQL 中获取前一行分区的最后一个值

c# - .NET DateTime 访问主机时间还是虚拟机时间?

c# - 当任何数学运算产生 'NaN' 时,如何强制 C# 编译器抛出异常?

c# - 命名空间、类、对象和实例之间有什么区别?