2011-09-06 43 views
8

我試圖運行以下代碼,但由於未交出我期望它的實體而導致比較失敗。使用實體框架4和Linq查詢來比較DateTime屬性中的日期的簡單方法

它比較06/09/2011 0:00:0006/09/2011 12:25:00,後者是我的數據庫記錄值。所以這就是爲什麼比較失敗,我沒有得到我需要的記錄。

我只是想比較,如果日期匹配,我不在乎時間。

DateTime today = DateTime.Now.Date; 
var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true || a.StartTime.Value == today) 
         .ToList(); 

如何僅比較日期?

如果使用在.StartTime.Value部分.Date財產,我得到一個異常:

指定類型的成員「日期」在LINQ是不支持的實體。 僅支持初始值設定項,實體成員和實體導航屬性 。

+0

也許這個問題會有幫助嗎? LINQ |如何在Linq查詢中執行日期比較? http://stackoverflow.com/questions/1088212/linq-how-do-i-perform-date-comparison-in-a-linq-query – Kyle

回答

16

您可以使用個人會員:

var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true 
            || (a.StartTime.Value.Year == todayYear 
             && a.StartTime.Value.Month == todayMonth 
             && a.StartTime.Value.Day == todayDay)) 
         .ToList(); 

...或使用任何the other methods/properties supported in L2E

+0

它被用於相同的運算符。如果我需要檢查大於和小於操作員,該怎麼辦? –

-1

嘗試

DateTime todayStart = DateTime.Now.Date; 
DateTime todayEnd = DateTime.Now; 
var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true || (a.StartTime.Value >= todayStart && a.StartTime.Value <= todayEnd)) 
         .ToList(); 
11

您還可以使用EntityFunctions.TruncateTime()命名空間System.Data.Objects

防爆下。

db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B") 

工程像魅力。

+1

那你怎麼寫UnitTests呢? –

+0

EntityFunctions現已過時,請改用DbFunctions! –