我的任务是返回车龄超过三年的汽车数量
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
会工作,但在网络表单中它返回 -1
或 Microsoft.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/