【问题标题】:.Net Raw String Query.Net 原始字符串查询
【发布时间】: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 查询中的 sded
  • 在您的 Linq 语句中,您只需要按日期分组以获得相同的查询。在我的脑海中,我认为group by t.PlanDate.Date into grouping 会起作用。
  • 只是一个旁注:而不是 dateadd(day, 0, datediff(day, 0, Plandate)) convert(date,Plandate) 怎么样?
  • @ozzmhmt 尝试将您的日期比较更改为(t.PlanDate &gt;= sd &amp;&amp; t.PlanDate &lt;= ed)

标签: c# asp.net sql-server entity-framework


【解决方案1】:

"db.Task.SqlQuery()" 返回任务集合。但是您的查询选择了另一列:“作为计数的数字和创建的日期时间”。你有两个解决方案

1- 根据您的 EF 版本,您可以使用 DbContext.Database.SqlQuery() 或类似的东西。 2- 在数据库中创建一个视图并在 dbcontext 的“OnModelCreating”方法中映射到 EF 实体模型:

 modelBuilder.Entity<ViewModel>(eb =>
                       {
                           eb.HasNoKey();
                           eb.ToView("ViewName");
                       });

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2018-09-22
    相关资源
    最近更新 更多