如何使用LINQ将日期与毫秒进行比较

时间:2010-08-25 15:43:18

标签: c# linq-to-sql datetime

我尝试使用LINQ to SQL对我的数据库进行查询。

示例:

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

问题是SQL返回的日期是毫秒,myDate变量包含de good毫秒,但是当我比较日期时,comparaison不是valide,因为myDate的默认输出是MM / dd / yyyy HH:mm: ss和sql返回MM / dd / yyyy HH:mm:ss:fff。

我如何以毫秒获得约会?

3 个答案:

答案 0 :(得分:5)

听起来您希望将.NET日期时间与精确毫秒与SQL日期时间进行比较,精确到毫秒。

在测试时,看起来LINQ To SQL生成的SQL有一个缺陷:它从其内部存储的ticks转换为字符串表示不正确。

我已将此内容提交给Microsoft Connect:https://connect.microsoft.com/VisualStudio/feedback/details/589054尝试使用repro!

要解决此问题,即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);

答案 1 :(得分:4)

您的某个日期是否具有毫秒精度,而另一个日期没有? 在这种情况下,我倾向于尝试这样的事情:

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

page显示Linq to SQL支持的DateTime方法/属性。

答案 2 :(得分:0)

Check out this link on SO

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

面对同样的问题,我有5分钟的分辨率。