【问题标题】:Linq Date comparison with same dayLinq 与同一天的日期比较
【发布时间】:2012-06-14 06:18:26
【问题描述】:

我有这个问题:

var q = from p in DB.treatments
    where p.start >= start && p.end <= end
    select p;

在数据库中,末尾显示 06/14/2012 12:00 a.m. 这应该包括整个 6 月 14 日,就在 6 月 15 日之前。

因此,如果我在 2012 年 6 月 14 日下午 4:00 发送结束参数。它不会返回任何东西,只有当它是 06/15/2012 但我希望它在 14 日而不是 15 日搜索一整天。

所以我想搜索14个的整天,而DateTime则在选择14.

时返回此06/14/2012 12:00

我该怎么做?

【问题讨论】:

  • 为什么不给 EndParameter 添加一天并将时间归零?

标签: c# linq search datetime


【解决方案1】:

您需要比较startendDate 属性

 var q = from p in DB.treatments
         where p.start >= start.Date && p.end <= end.Date
         select p;

如果start.Date6/14/2012 4:00 PM,那么当您使用Date 属性时,您将只是在6/14/2012 上进行比较。

【讨论】:

    【解决方案2】:

    您需要与 .Date 进行比较。如果您正在查询数据库,.Date 函数将无法工作,因为它无法转换为 SQL。

    LINQ to Objects 使用

    var q = from p in DB.treatments
        where p.start >= start.Date && p.end <= end.Date
        select p;
    

    对于 LINQ to SQL 或 LINQ to ENTITIES 使用

    var startDate = start.Date;  
    var endDate = end.Date;  
    var q = from p in DB.treatments  
            where p.start >= start && p.end <= end  
            select p;  
    

    更新:如果正在使用 .NET 4.0+,您可以使用实体函数 TruncateTime。比如:

    var q = from p in DB.treatments
        where EntityFunctions.TruncateTime(p.start) >= EntityFunctions.TruncateTime(start)      
            && EntityFunctions.TruncateTime(p.end) <= EntityFunctions.TruncateTime(end)
        select p;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多