我的任务是归还年龄超过三年的汽车数量。
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();
}
在花时间搜索和研究微软文档之后,我发现FromSqlRaw
可以工作,但在web形式下,它会返回-1
或Microsoft.EntityFrameworkCore.Query.Internal.Entityqueryable<T>
。
对数据库的直接查询返回正确的值,即1
car。在FromSqlRaw
返回异常后添加任何参数。
我只是没有得到或得到ReleaseDate
,然后格式化和分割它是太多了吗?
发布于 2020-06-03 14:43:31
FromSqlRaw
返回实体类型(Car
),这就是出现此问题的原因。它不返回任意值(如COUNT()
的结果)。来自文档 (黑石矿):
原始SQL查询可以返回常规实体类型或无键实体类型,这些实体类型是模型的部分。
您可以直接使用EF.Functions.DateDiffDay
和Count
使用LINQ构建此查询。假设您的实体有一个名为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
);
https://stackoverflow.com/questions/62183759
复制相似问题