2016-02-02 40 views
2

当使用Linq2Sql在特定日期时间查询数据库时,查询总是返回而没有结果。我怀疑时间是由纳秒导致的差异。时代必须平等,但不是平等的。我如何查询数据库的日期时间,精确到第二位?如何使用LinqToSql在特定日期时间查询

下面的代码的工作,但它完全排除时间部分:

 var Foos = Bars 
       .Where(x => 
        DbFunctions.TruncateTime(x.EndDate) == DbFunctions.TruncateTime(endDate)) 
       .Select(x => x.Id); 

也试过这个代码(其是不漂亮),但是编译器抱怨具有LINQ查询内部日期。

 var Foo = Bars 
       .Where(x => 
         x.EndDate.Value.Date == endDate.Value.Date && 
         x.EndDate.Value.Hour == endDate.Value.Hour && 
         x.EndDate.Value.Minute == endDate.Value.Minute && 
         x.EndDate.Value.Second == endDate.Value.Second) 
       .Select(x => x.Id); 

也试过这个,但查询总是回来空。可能ToString()在Linq查询中不起作用。

var foo = bars.Where(x => x.EndDate.ToString() == endDate.ToString()) 
+0

我不得不做类似的东西了一段时间回来,用http://stackoverflow.com/questions/1004698/how-to-truncate-milliseconds-off-of-a-net-datetime去解决它。我没有用你的例子测试过。 –

+0

不确定这将在linq查询中起作用,但是我会给它一张 – navig8tr

+0

您是否尝试使用'DiffSeconds'方法? –

回答

1

可以使用DiffSeconds方法是这样的:

var Foo = Bars 
     .Where(x => DbFunctions.DiffSeconds(x.EndDate, endDate) == 0) 
     .Select(x => x.Id); 
0

一个办法解决是比较日期部分和时间部分分别。而不是试图投,让分而治之

假设你存储在数据库中的数据如下

Pickup Time :10/9/2015 12:53:15 AM 

,如果你想将它当前的系统时间可达比较小时,下面的查询工作

orddb.order.Where(x.PickupDate.Hour >= DateTime.Today.Hour 
        && x.PickupDate >= DateTime.Today) 
相关问题