2016-02-02 48 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) 
相關問題