代码之家  ›  专栏  ›  技术社区  ›  Cédric Boivin

如何将日期与毫秒与Linq进行比较

  •  4
  • Cédric Boivin  · 技术社区  · 14 年前

    我尝试使用linq to sql查询数据库。

    例子:

    var t = from a in context.A where a.date == myDate select a;
    

    问题是从SQL返回的日期是毫秒,mydate变量包含de good毫秒,但是当我将日期一起比较时,比较无效,因为mydate的默认输出是mm/dd/yyyy hh:mm:ss,而sql返回mm/dd/yyyy hh:mm:ss:fff。

    我怎么能用毫秒来得到我的约会对象?

    3 回复  |  直到 8 年前
        1
  •  5
  •   p.campbell    14 年前

    听起来您想将.NET日期时间与精确毫秒数进行比较,而将SQL日期时间与精确毫秒数进行比较。

    在测试中,LinqToSQL生成的SQL似乎有一个缺陷:它不正确地从记号的内部存储舍入到字符串表示。

    我已将此提交给Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/details/589054 试试看!

    为了解决这个缺陷,在 DateTime 在生成的SQL中被不正确地四舍五入,考虑挑选出日期中的每个元素,并比较每个项(这很荒谬,我知道!):

    DateTime d = DateTime.Parse("Jan 1 2010 09:44:33.0110");
    
    var t = m.Msgs.Where(mm => 
                    mm.CreatedOn.Value.Date == d.Date
                 && mm.CreatedOn.Value.Hour == d.Hour
                 && mm.CreatedOn.Value.Minute== d.Minute
                 && mm.CreatedOn.Value.Second == d.Second
                 && mm.CreatedOn.Value.Millisecond == d.Millisecond);
    
        2
  •  4
  •   Samuel Jack    13 年前

    你的一个约会精确到毫秒,而另一个没有? 在这种情况下,我倾向于尝试这样的方法:

    var t = from a in context.A where SqlMethods.DateDiffSecond(a.date, myDate) == 0 select a;
    

    这个 page 显示Linq to SQL支持的日期时间方法/属性。

        3
  •  0
  •   Community CDub    8 年前

    Check out this link on SO

    source = source.Where(o => 
      o.TaskStartDate.Value.AddTicks(-(o.TaskStartDate.Value.Ticks % TimeSpan.TicksPerSecond)) == dtStartDate);
    

    和你面临的问题一样,我在5分钟内就解决了。