【问题标题】:Filtering Date in where clause of EntityDataSource在 EntityDataSource 的 where 子句中过滤日期
【发布时间】:2017-06-05 13:29:15
【问题描述】:

我有一个 EntityDataSource,我必须过滤所有超过 30 天的项目。

我的 MSSQL 数据库方法:

protected void EntityDataSource1_Selecting(object sender, EntityDataSourceSelectingEventArgs e)
{
    EntityDataSource1.WhereParameters.Clear();    
    EntityDataSource1.Where = "DATEDIFF(day, GETDATE(), it.CreateDate) < 30" ;
}

给出错误:DATEDIFF 无法解析为有效的类型或函数

【问题讨论】:

  • 这是一个 T-SQL 数据库,比如 SQL Server 吗? DATEDIFF() 是一个 T-SQL 命令。但是,如果您使用的是 Oracle DB,则该功能不存在,并按照此处所述完成:stackoverflow.com/questions/28406397/…
  • @user1895086 TO_DATE 无法解析为有效的类型或函数
  • 你能在数据库中通过查询来做到这一点吗?因为实体真的很有趣,但你必须使用可以转换为数据库查询的函数,你正在使用的那个
  • @AntoinePelletier 是的,SELECT * FROM [User] WHERE DATEDIFF(day, GETDATE(), CreateDate) &lt; 30 工作
  • 您可以使用WHERE it.CreateDate&lt;= NOW() - INTERVAL 1 MONTH;,前提是it.CreateDate 是日期时间或时间戳类型

标签: c# asp.net entity-framework


【解决方案1】:

你需要拨打SqlServer.DATEDIFF(),使用这个:

EntityDataSource1.Where = "SqlServer.DATEDIFF(day, GETDATE(), it.CreateDate) < 30" ;

改为

EntityDataSource1.Where = "DATEDIFF(day, GETDATE(), it.CreateDate) < 30" ;

Here 你会发现类似的问题,但有DATEADD 功能

【讨论】:

    猜你喜欢
    • 2022-05-05
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2010-12-12
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多