【发布时间】:2021-10-07 22:31:55
【问题描述】:
我正在使用实体框架开发一个 .NET Wep API 项目。我无法为此 SQL 代码编写带有实体的查询:
select
count(*) as total,
dateadd(day, 0, datediff(day, 0, Plandate)) as created
from
Task
where
AssignedUserId = 3
and (PlanDate between '2021-07-01' and '2021-07-31 23:59')
group by
dateadd(day, 0, datediff(day, 0, PlanDate))
这是我使用原始查询编写它的方式:
var a = db.Task.SqlQuery("select count(*) as total, DATEADD(DAY,0, datediff(day,0,Plandate)) as created from Task where AssignedUserId = 3 and(PlanDate between '2021-07- 01' and '2021-07-31 23:59') group by dateadd(DAY, 0, datediff(day, 0, PlanDate))").ToList();
但我收到此错误:
System.Data.Entity.Core.EntityCommandExecutionException: '数据读取器与指定的 'CRMSFAData.Model.Task' 不兼容。类型的成员“id”在数据读取器中没有同名的对应列。'
我尝试用实体写:
var query = from t in db.Task
where (t.AssignedUserId == userId && (t.PlanDate <= sd && t.PlanDate >= ed))
group t by new { t.PlanDate } into grouping
select new
{
c = grouping.Count(),
grouping.Key.PlanDate
};
return query.ToList();
这会返回一个空的结果集。
还有其他实体查询或原始查询的解决方案吗?你能帮帮我吗?
【问题讨论】:
-
还有什么是 LINQ 查询中的
sd和ed? -
在您的 Linq 语句中,您只需要按日期分组以获得相同的查询。在我的脑海中,我认为
group by t.PlanDate.Date into grouping会起作用。 -
只是一个旁注:而不是 dateadd(day, 0, datediff(day, 0, Plandate)) convert(date,Plandate) 怎么样?
-
@ozzmhmt 尝试将您的日期比较更改为
(t.PlanDate >= sd && t.PlanDate <= ed)
标签: c# asp.net sql-server entity-framework