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

Céd*_*vin 4 c# datetime linq-to-sql

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

例如:

var t = from a in context.A where a.date == myDate select a;
Run Code Online (Sandbox Code Playgroud)

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

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

Sam*_*ack 5

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

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

页面显示了 Linq to SQL 支持的 DateTime 方法/属性。


p.c*_*ell 5

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

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

我已将此提交到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);
Run Code Online (Sandbox Code Playgroud)