如何仅比较LINQ中的DateTime中的Date部分与实体(案例: - 日期相等)

时间:2016-12-08 08:02:52

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

现在有一天正在寻找谷歌的解决方案。但是还没有找到任何解决方法。

我有一个表单,我使用jQuery日历选择开始日期和结束日期。

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)),

                             });

它会返回正确的记录,直到开始日期小于结束日期,但

  

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

这个LINQ有什么问题。

只是比较日期

1 个答案:

答案 0 :(得分:0)

以下是我更新的LINQ,它解决了我的要求,即在比较时排除Nullable<DateTime>的时间部分: -

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&amp; endDate是方法参数。

希望这有帮助:)