2011-01-10 66 views
4

我試圖做的LINQ to Entities查詢(還是很新的與EF和正在學習的地方比LinqToSQL差異),我試圖做這樣的事情:實體框架日期解析

DateTime begin = new DateTime(2011, 1, 1); 

Apps = (from app in context.Instances 
       where app.ReleaseDate.Date == begin 
       select new ScalpApp 
       { 
       Image = app.Image, 
       PublisherName = app.PublisherName, 
       }).ToList(); 

雖然這在LinqPad中有效,但它不在我的代碼中。被拋出的異常是:

The specified type member 'Date' is not supported in LINQ to Entities. 

只有初始化,實體成員和 實體導航屬性都支持 。

如何在LinqToEF中執行此操作?數據庫中的字段是完整的DateTime(帶時間碼),我試圖僅基於日期解析。

回答

5

您水溼簡單的用 'app.ReleaseDate.Data',但您可以:

var begin = new DateTime(2011, 1, 1); 
var end = begin.AddHours(24); 

Apps = (from app in context.Instances 
      where 
       (app.ReleaseDate >= begin) and 
       (app.ReleaseDate < end) 
      select new ScalpApp 
      { 
      Image = app.Image, 
      PublisherName = app.PublisherName, 
      }).ToList(); 
+0

是啊,這是excatly,我最後不得不去。有點惱火,但是哦。雖然,我確實開始。添加日期(1)。 – 2011-01-10 06:43:46

3

這其中甚至可能對日期字段使用索引:

DateTime begin = new DateTime(2011, 1, 1); 
DateTime end = new DateTime(2011, 1, 2); 

Apps = (from app in context.Instances 
      where 
       (app.ReleaseDate >= begin) and 
       (app.ReleaseDate < end) 
      select new ScalpApp 
      { 
      Image = app.Image, 
      PublisherName = app.PublisherName, 
      }).ToList(); 
0

EF不能得到翻譯Date部分DateTime轉換爲SQL代碼。但它有EntityFunctions.TruncateTime方法,它可以轉化成規範TruncateTime功能:

DateTime begin = new DateTime(2011, 1, 1); 

Apps = (from app in context.Instances 
     where EntityFunctions.TruncateTime(app.ReleaseDate) == begin 
     select new ScalpApp { 
      Image = app.Image, 
      PublisherName = app.PublisherName, 
     }).ToList();