【问题标题】:Looking for Specific Date寻找具体日期
【发布时间】:2010-09-28 05:29:21
【问题描述】:

有人知道如何在实体框架中查询特定日期吗?我尝试了以下代码,但它给了我 NotSupportedException。

var deposit = (from tempDeposit in entities.Deposit
where !tempDeposit.IsApproved
&& tempDeposit.CreatedDate.Date == DateTime.Today
select tempDeposit).FirstOrDefault();

我也尝试了以下代码,但仍然给了我 NotSupportedException。

var deposit = (from tempDeposit in entities.Deposit
where !tempDeposit.IsApproved
&& tempDeposit.CreatedDate.ToFullString() == DateTime.Today.ToFullString()
select tempDeposit).FirstOrDefault();

ToFullString() 是一个扩展方法

public static string ToFullString(this DateTime date){
  return date.ToString("yyyyMMdd");
}

请帮忙。

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    试试这个:

    var d1 = DateTime.Today;
    var d2 = d1.AddDays(1);
    var deposit = (from tempDeposit in entities.Deposit
                   where !tempDeposit.IsApproved
                         && tempDeposit.CreatedDate >= d1
                         && tempDeposit.CreatedDate < d2
                   select tempDeposit).FirstOrDefault();
    

    由于您不能使用 DateTime 列的 .Date 属性,因为它必须用 SQL 编写,具有一系列转换、强制转换、截断等,因此您需要比较整个 DateTime 值、日期并将两者都计时到一个值,因此您需要与一个范围进行比较。

    编辑已更改以反映不支持 .AddDays。

    【讨论】:

    • 它仍然给我这个,System.NotSupportedException: LINQ to Entities 无法识别方法 'System.DateTime AddDays(Double)' 方法,并且此方法无法翻译成商店表达式。跨度>
    • 好的,那么我应该按照我通常的方式编写查询:P 虽然我承认我还没有大量使用 LINQ-To-SQL,仅用于实验。
    • 没问题m8,我根据你的回答找到了解决办法
    【解决方案2】:

    好吧,经过一段时间的尝试,我找到了解决方案

    var deposit = entities1.Deposit
                  .Where("CreatedDate >= @0 and CreatedDate < @1", DateTime.Today, DateTime.Today.AddDays(1))
                  .FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2018-07-14
      • 2010-12-30
      • 2018-11-04
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多