2016-01-19 42 views
0

我有一個表作爲PSR_LOAD_DATE_TIME一列含有格式2016年1月9日14時06分19秒如何使用LINQ

但價值得到varchar類型的datetime列僅日期(32)列的類型是varchar(32)。

我有一個linq查詢來比較PSR_LOAD_DATE_TIME與一個特定的日期。但它將PSR_LOAD_DATE_TIME與時間進行比較。

where (t0.PSR_LOAD_DATE_TIME.CompareTo(from_Date) >= 0) && (t0.PSR_LOAD_DATE_TIME.CompareTo(to_Date) <= 0)

這裏FROM_DATE和TO_DATE變量包含像2016年1月3日值。

因此,我需要從PSR_LOAD_DATE_TIME中刪除時間部分。

如何編寫Linq查詢呢?

+0

任何機會,你可以存儲你的日期作爲適當的datetime2對象在你的數據庫? –

回答

0

我想你使用EF來查詢這一個。

所以,你應該嘗試

DbFunctions.TruncateTime 
1

您可以解析在PSR_LOAD_DATE_TIME日期時間表達成真正的日期時間,然後用只是DateTime對象的日期部分。

void Main() 
{ 
    List<string> dates = new List<string>(); 
    dates.Add("2016-01-18 12:05:12"); 
    string from_Date = "2016-01-16"; 
    string to_Date = "2016-01-18"; 

    var date = from d in dates where (DateTime.ParseExact(d, "yyyy-MM-dd HH:mm:ss", null) 
     .Date.CompareTo(DateTime.ParseExact(from_Date, "yyyy-MM-dd", null)) >= 0 && 
     DateTime.ParseExact(d, "yyyy-MM-dd HH:mm:ss", null) 
     .Date.CompareTo(DateTime.ParseExact(to_Date, "yyyy-MM-dd", null)) <= 0) 
     select d; 

    foreach(var d in date) { 
     Console.WriteLine(d.ToString()); 
    } 
} 
+0

我試過這個。但是在執行查詢時,出現此錯誤:LINQ to Entities無法識別方法System.DateTime ParseExact(System.String,System.String,System.IFormatProvider)方法,並且此方法無法轉換爲存儲表達式。 –

+0

如果使用實體框架,EF可能無法將ParseExact方法轉換爲底層數據庫可執行的內容。我不知道在EF中是否有辦法實現這一點。如果沒有,則可以使用EF選擇與from_Date和to_Date匹配的記錄的範圍稍寬的記錄,然後過濾內存中的不匹配記錄。 –