【问题标题】:How to compare only Date portion in DateTime in LINQ to Entities (Case:- Dates are equal)如何在 LINQ to Entities 中仅比较 DateTime 中的日期部分(案例:- 日期相等)
【发布时间】:2016-12-08 08:02:51
【问题描述】:

现在已经过了一天在谷歌上寻找解决方案。但还没有找到任何解决办法。

我有一个表单,我在其中使用 jQuery 日历来选择 Start 日期和 END 日期。

public Nullable<DateTime> AssignedDate { get; set; }

下面是我的 LINQ

from c in entities.tDocumentStatus
                             orderby c.AssignedDate descending
                             where (EntityFunctions.TruncateTime(c.AssignedDate) >= EntityFunctions.TruncateTime(startDate.Date) && EntityFunctions.TruncateTime(c.AssignedDate) <= EntityFunctions.TruncateTime(endDate.Date))
                             select new ReportMapper()
                             {
                                 DocumentName = c.CheckoutFolderName,
                                 AssignedDate = c.AssignedDate==null? (EntityFunctions.TruncateTime(c.LastUpdatedOn)):  (EntityFunctions.TruncateTime(c.AssignedDate)),

                             });

它返回正确的记录直到开始日期小于END日期但是当

开始日期等于结束日期。它不返回记录(但是有记录)。

这个 LINQ 有什么问题。

只是比较日期

【问题讨论】:

  • 那么startDateendDate 和一个您说应该返回但不是的特定c 记录中的值是什么?
  • @hvd startDate = {12/5/2016 12:00:00 AM} 和 endDate = {12/5/2016 12:00:00 AM}
  • TruncateTime 通常会从DateTime 值中去除时间部分,检查生成的查询命令是否包含WHERE startDate = endDate 并尝试针对DB 运行它。
  • @TetsuyaYamamoto,对不起!!我没找到你

标签: c# asp.net sql-server linq


【解决方案1】:

下面是我更新的 LINQ,它满足了我的要求,即在比较时从 Nullable&lt;DateTime&gt; 中排除时间部分:-

from c in entities.tDocumentStatus
                         orderby c.AssignedDate descending
                         where ((EntityFunctions.CreateDateTime(c.AssignedDate.Value.Year, c.AssignedDate.Value.Month, c.AssignedDate.Value.Day, 0, 0, 0) >= EntityFunctions.CreateDateTime(startDate.Year, startDate.Month, startDate.Day, 0, 0, 0)) && 
                             EntityFunctions.CreateDateTime(c.AssignedDate.Value.Year, c.AssignedDate.Value.Month, c.AssignedDate.Value.Day, 0, 0, 0) <= EntityFunctions.CreateDateTime(endDate.Year, endDate.Month, endDate.Day, 0, 0, 0)
                         select new ReportMapper()
                         {
                             DocumentName = c.CheckoutFolderName,
                             AssignedDate = c.AssignedDate==null? (EntityFunctions.TruncateTime(c.LastUpdatedOn)):  (EntityFunctions.TruncateTime(c.AssignedDate)),

                         });

这里startDate & endDate 是方法参数。

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多