【问题标题】:Linq to Entity get a Date from DateTimeLinq to Entity 从 DateTime 获取日期
【发布时间】:2010-07-06 10:39:18
【问题描述】:

var islemList = (from isl in entities.Islemler where (isl.KayitTarihi.Date >= dbas && isl.KayitTarihi.Value.Date

它给出错误:LINQ to Entities 中不支持日期... 我如何在 linq 中获取日期。

【问题讨论】:

  • dbas和dbit的类型是什么?是日期时间吗? KayitTarihi.Value 是什么导航属性?
  • 如果您的数据类型为 DateTime(可为空),请尝试不使用 .Date.Value.Date

标签: c# .net linq entity-framework


【解决方案1】:

【讨论】:

  • 请注意,现在不推荐使用 EntityFunctions,而应使用 System.Data.Entity.DbFunctions。
  • 现在是 EF 6 以后的版本。实现没有改变,它只是将旧函数重命名为新函数,因此您可以安全地更新现有代码。来自提交消息:“具有旧名称的类基本上只是委托给新​​类,并且也被标记为过时以帮助人们转移到新类。”
  • EntityFunctions.TruncateTime 现已弃用,改为使用 DbFunctions.TruncateTime
【解决方案2】:

如果 KayitTarihi 是 DB 中的日期列(并且 dbas 和 dbit 是 DateTime),则使用:

var islemList = (from isl in entities.Islemler where (isl.KayitTarihi >= dbas && isl.KayitTarihi <= dbit) select isl);

【讨论】:

  • KayitTarihi 是 DateTime 但我只需要 Date
  • 试试((Nullable&lt;DateTime&gt;)isl.KayitTarihi.Date)。不知道 si LINQ 会如何反应。您也可以修改dbasdbit(如果它们没有时间部分),这样您就不必从KayitTarihi 中提取日期值:...where (isl.KayitTarihi &gt;= dbas &amp;&amp; isl.KayitTarihi &lt; dbit.AddDays(1))...
【解决方案3】:

.Date 属性在 Linq to Entities 中不受支持(尽管它可能在 Linq 的其他实现中受支持)。

我知道您只想比较日期,但如果 dbas 和 dbit 值是时间为 00:00:00 的日期时间,则比较日期时间没有真正的问题。 您可能必须偏移日期或使用其他不等式检查来获得正确的间隔,但比较会按您的意愿进行。

我个人会选择 Jandek 的解决方案。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2010-10-08
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多