我尝试使用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。
我如何以毫秒获得约会?
答案 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)
source = source.Where(o =>
o.TaskStartDate.Value.AddTicks(-(o.TaskStartDate.Value.Ticks % TimeSpan.TicksPerSecond)) == dtStartDate);
面对同样的问题,我有5分钟的分辨率。