【问题标题】:get date part only from datetime value using entity framework使用实体框架仅从日期时间值获取日期部分
【发布时间】:2015-08-15 18:29:36
【问题描述】:

我只想从数据库“日期时间”值中获取日期部分 我正在使用下面的代码..但它正在获取日期和时间部分。

using (FEntities context = new FEntities())
{
    DateTime date = DateTime.Now;
    if (context.tblvalue.Any(x => x.date == date))
    {    
    }
}

【问题讨论】:

  • 不要忘记为您的问题标记选择的答案。这将帮助其他人找到正确的答案。您似乎从未为您的问题选择过答案。
  • 这对我不起作用。但我使用如下。现在正在工作..谢谢x.date.Value.Date == date.Date
  • DateTime.Date 到目前为止在 EF 中不受支持,所以我不知道现在这对你来说如何工作。
  • @Safeena 查看我的编辑。
  • 是的,AsEnumerable() 让一切正常。但这是一个非常糟糕的解决方案,因为它首先将 all tblvalue 记录拉入内存。

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


【解决方案1】:

您可以只比较指定的部分:

context.tblvalue.Any(x => x.date.Year == data.Year 
                        && x.date.Month == data.Month 
                        && x.date.Day == data.Day);

编辑: 您还可以尝试以下方法:

context.tblvalue.Any(x => EntityFunctions.TruncateTime(x.date) == data.Date);

另一种方法:

context.tblvalue.Any(x =>  SqlFunctions.DatePart("year", x.date)  == data.Year 
                        && SqlFunctions.DatePart("month", x.date) == data.Month 
                        && SqlFunctions.DatePart("day", x.date)   == data.Day);

【讨论】:

  • 这个,我得用哪个实体框架版本。现在不能用x.date.Year==date.Year
  • 在较新的 EF 版本中,EntityFunctions 已过时,已被“DbFunctions”取代,但第二种方法非常有效,我在这些情况下使用。
  • 遗憾的是旧的 Linq2Sql 能够自动将DateTime.Date 转换为适合数据库的 SQL 表达式(例如,cast(d as date) 用于 SQL Server),但新的 EF 不能。
【解决方案2】:

配合实体框架6及更新使用

context.tblvalue.Any(x => DbFunctions.TruncateTime(x.date) == data.Date);

【讨论】:

    【解决方案3】:
    context.Database.SqlQuery<T>(sql, sql_parameters)
    

    在第一个参数中接受纯 SQL。 使用 MS SQL server 的功能 CONVERT(VARCHAR(6), date_value, 112) AS MonthYYYYmm 用于检索年份和月份。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      • 2011-06-06
      • 2018-04-25
      • 1970-01-01
      相关资源
      最近更新 更多