2012-11-05 46 views
0

請參閱下面的代碼:日期時間檢查Linq中where語句

var pcPageList = db.PcPages 
     .Where(m => 
      m.Quarter == exactQuarter && 
      m.Url == pageUrl && 
      m.UpdatedOn.ToDateTime().Date.ToString("dd/MMM").ToLower() == "02/nov") 
     .OrderBy(m => m.UpdatedOn) 
     .FirstOrDefault(); 

當我運行此之上,應用程序會引發錯誤說:「ToDateTime」尚未實現。任何人都可以建議嗎?

+1

「UpdatedOn」是什麼類型? – KingCronus

+0

它是DateTime類型 – Tun

+0

那麼,爲什麼你需要將它轉換爲DateTime,如果它已經是一個日期時間類型? – KingCronus

回答

0

相反比做一個字符串比較,它會更有效率直接比較日期組件。我沒有測試過這個,但是像下面這樣的東西可能會起作用:

var pcPageList = db.PcPages 
     .Where(m => m.Quarter == exactQuarter && m.Url == pageUrl) 
     // You may need to materialize the results of the query at this point 
     // or use Convert.ToDateTime(...) instead of ToDateTime() 
     .Select(m => new { Row = m, UpdatedOn = m.UpdatedOn.ToDateTime() }) 
     .Where(a => a.UpdatedOn.Month == 11 && a.UpdatedOn.Day == 2) 
     .Select(a => a.Row) 
     .OrderBy(m => m.UpdatedOn) 
     .FirstOrDefault(); 
+0

謝謝你。我想這是最好的解決方案,但我不能像「02/Nov」一樣使用。 – Tun

+0

@coder爲什麼你需要匹配像「02/Nov」這樣的值? –

1

我想,你應該使用ToDateTimeConvert類作爲被調用:

Convert.ToDateTime(m.UpdatedOn).Date... 

並刪除作爲之間的Date

Convert.ToDateTime(m.UpdatedOn).ToString("dd/MMM").ToLower() == "02/nov" 
+0

此錯誤「在數據庫服務器端執行'System.DateTime:ToString(String)'目前未實現。」仍然在拋出。 – Tun

+0

@coder:你在'm.UpdatedOn'中有什麼價值?另外我希望那是String類型。請告訴我。 –

+0

我有這個EG 2012-11-02 17:03:52.853 – Tun

2

如何:

var updateStart = DateTime.ParseExact("02/nov", "dd/MMM", CultureInfo.InvariantCulture); 
var updateEnd = updateStart.AddDays(1.0); 
var pcPageList = db.PcPages 
    .Where(m => 
     m.Quarter == exactQuarter && 
     m.Url == pageUrl && 
     m.UpdatedOn >= updateStart && 
     m.UpdatedOn < updateEnd) 
    .OrderBy(m => m.UpdatedOn) 
    .FirstOrDefault(); 
+0

這總是返回空記錄cos m.UpdatedOn有喜歡02/11/2012 12:00:00。 DateTime.ParseExact返回02/11/2012 00:00:00。 – Tun

+0

如果UpdatedOn有一個時間組件,那麼你需要檢查它是否在兩個「midnights」之間。看到我更新的答案。 –