【问题标题】:Comparing dates in linq比较linq中的日期
【发布时间】:2014-12-03 05:58:12
【问题描述】:

我想在数据库中查询日期大于或等于给定日期的项目。

db中的日期是一个日期时间,记录时间。

如果用户输入搜索字符串“2014 年 1 月 30 日”,他们希望返回在该日期的任何时间出现的条目。但是,任何在 12 点之后有时间的东西都不会被退回。

我知道我可以简单地在搜索字符串中添加一天,但是有更合适的方法吗?

if (form["closedend"] != "")
{
     DateTime d = DateTime.Parse(form["closedend"]);
     traces = traces.Where(s => s.date_Closed >= d);
}

【问题讨论】:

    标签: c# html forms linq linq-to-entities


    【解决方案1】:

    您可以使用Date property 截断时间部分:

     traces = traces.Where(s => s.date_Closed.Date <= d.Date);
    

    这样你就可以包含这一天,因为DateTimes 都是午夜。

    更新如果您使用 LINQ to Entities DateTime.Date 不受支持,您可以使用此解决方案:Using DateTime in LINQ to Entities

    .Where(s => EntityFunctions.TruncateTime(s.date_Closed) <=  EntityFunctions.TruncateTime(d))
    

    【讨论】:

    • 我不确定 OP 是否使用 Linq-to-Entities(他们提到了一个 db),但如果是 Date 将无法工作。
    • 我最终使用了 DbFunctions,因为 EntityFunctions 已被弃用。感谢您的帮助!
    【解决方案2】:

    你说

    日期大于或等于给定日期

    但是在你写的代码中

    s.date_Closed <= d
    

    我认为你必须将 &lt;= 更改为 &gt;= 以获得大于或等于 d 的日期,现在你得到的日期小于或等于 d。

    【讨论】:

      【解决方案3】:

      对于此示例,您不需要任何其他 dll。你可以实现其他函数,返回bool, f.e:

      public bool MyFunction(DateTime s)
      {
         DateTime d = DateTime.Parse(Your constructor);
         return (s.date_Closed >= d);
      }
      
      var query = from obj in traces
                  where MyFunction(obj.date_Closed.Date)
                  select obj;
      

      或:

      var query = traces.Where(p => MyFunction(p.data_Closed.Date));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 2012-02-07
        • 2018-04-26
        • 2011-06-16
        • 1970-01-01
        相关资源
        最近更新 更多