2015-07-01 98 views
1

如果我在標題中描述了正確的話,我想通過datetime值僅僅通過小時和分鐘值來查詢。動態比較LINQ to sql的時間

事實上,我想按工作小時篩選當天的行。

我加個小時純日期值

elementsOturums.Where(i => i.EntryTime.Value.AddDays(1) < i.EntryTime.Value.Date.AddDays(1).AddHours(8).AddMinutes(30) 
                && i.EntryTime.Value > i.EntryTime.Value.Date.AddHours(17).AddMinutes(15)); 

嘗試過,但它給了錯誤等;

日期函數dateadd不支持datepart毫秒數據類型日期。

然後我試圖用一種方法克服,但它又給了一個錯誤,如:

方法「{0}」不支持對SQL的轉換。

那麼我該如何實現這個問題呢?

+0

i.EntryTime.Value> i.EntryTime.Value.Date.AddHours(17).AddMinutes(15)此條件不應該爲true。 –

+0

您不能調用數據提供者不知道如何將其轉換爲SQL的方法。也許你可以試試。在這裏(我=> i.EntryTime.Value.Hour <8 && i.EntryTime.Value.Minute <30 ...)。 – Moozz

+0

[類似的問題](http://stackoverflow.com/questions/1227648/how-to-add-day-to-date-in-linq-to-sql)被問到之前,給出的答案是有用的這個問題也是如此。 – tafa

回答

1

你應該把時間跨度比較:

var wdStart = TimeSpan.FromHours(8.5); 
var wdEnd = TimeSpan.FromHours(17.25); 

var result = elementsOturums.Where(t => t.EntryTime.HasValue) 
    .Where(t => t.EntryTime.Value.TimeOfDay >= wdStart 
      && t.EntryTime.Value.TimeOfDay <= wdEnd); 

這給了你工作時間的項目。

+0

很好的答案謝謝。 –