2010-12-05 27 views
3

我在SQL Server 2008中有timestamp列。如何使用Linq-to-Entities查詢SQL Server 2008中的時間戳?

現在我需要通過使用從日曆服務器控件拾取的日期來查詢該列。

我們假設我有一個DateTime dt對象;

我需要過濾該日期時間對象,該對象返回該日期(dt)上記錄的所有記錄。

var a = DateTime.Now.ToString(); 
    var IsDone = from d in _le.diets 
       where d.log_time.Contains(a) 
       select d.done; 

_le是一個私有實體框架對象。

此代碼有問題:

錯誤3「字節[]」不包含關於「包含」和最好 擴展方法過載 「System.Linq.ParallelEnumerable.Contains一個 定義(系統.Linq.ParallelQuery, TSource)」具有一些無效 參數F:\測試\飲食\飲食\ DataTier \ DietMo​​vieRepository.cs 30 32飲食

錯誤2無法將拉姆達 表達爲類型 '串',因爲它 不是委託 型F:\測試\飲食\飲食\ DataTier \ DietMo​​vieRepository.cs 30 26飲食

錯誤1代表 'System.Func' 不採取1個 參數F:\測試\飲食\飲食\ DataTier \ DietMo​​vieRepository.cs 30 26飲食

錯誤4實例論證:不能從 轉換 '字節[]' 至 'System.Linq.ParallelQuery' F:\測試\飲食\飲食\ DataTier \ DietMo​​vieRepository .cs 30 32飲食

我是EF初學者,臨時工你的幫助!

UPDATE

在EF CS文件

我看到

public static diet Creatediet(global::System.Int64 id, global::System.Boolean done, global::System.Byte[] log_time) 
     { 
      diet diet = new diet(); 
      diet.id = id; 
      diet.done = done; 
      diet.log_time = log_time; 
      return diet; 
     } 

回答

3

一個SQL Server「時間戳」無關隨時間(實際上名爲「時間戳」現在被標記爲已棄用;「rowversion」是相同的,並且應該是用來代替)。

如果你真的有一個「時間戳」,這是不可能的。如果你有一個日期時間設置到插入的時候,它應該是微不足道的:

DateTime start = date.Date, end = start.AddDays(1); 

... 
where row.log_time >= start && row.log_time < end 
... 

另外,如果你主要是做日期範圍搜索,log_time可爲聚簇索引公平的候選人。或者,如果您正在進行基於日期的查詢,則在進入時期的整數上的非聚集索引也會起作用。

0

假設你想看看只是它的日期部分?然後,你應該能夠做這樣的事情:

var a = DateTime.Now; 
    var isDone = from d in _le.diets 
       where d.log_time.Date == a.Date 
       select d.done; 
+0

感謝您的答案,但它看起來我不能得到d.log_time.Date。因爲log_time是數據庫中的時間戳。 – user469652 2010-12-05 08:20:57

+0

哦,好吧,什麼是log_time的類型?它是TimeSpan嗎? – Phill 2010-12-05 08:23:53