2014-02-08 89 views
0

我想字符串轉換爲日期時間,然後對它們進行比較,i'm trying to compare 2 datetime stored in an sqllite database, but i still get the error "no such fonction converttodatetime" here is my code:如何比較2日期時間

from x in db.Table<FicheTechnique>() 
        where Convert.ToDateTime(x.FirstDate) <= Convert.ToDateTime(newDate) 

        select x; 
+0

是的,他們都是字符串:DateTime的DT; dt = DateTime.Now; string newDate; newDate = dt.ToString(「dd/MM/yy」);;消息是一個sqlLite異常:「no such function:todatetime」,內部異常爲空 –

+0

FirstDate和newDate是string類型嗎?你能指定確切的錯誤信息嗎? –

+0

您嘗試使用的Convert.ToDateTime方法聲明它總是拋出異常。嘗試做這個,而不是。它會將字符串解析爲DateTime。 DateTime d = DateTime.TryParse(string); – deathismyfriend

回答

0

以下是你需要做什麼

var data = from r in dt.AsEnumerable() 
      where Convert.ToDateTime(r["fld name"]) <= Convert.ToDateTime(newDate) 
      select r; 

你的問題是,你需要做的當你處理數據表時,請使用dt.AsEnumerable()。您的data將是可枚舉的行集合。

完整的例子:

DataTable dt = new DataTable(); 
dt.Columns.Add("a"); 
dt.Columns.Add("b"); 
dt.Columns.Add("c"); 

dt.Rows.Add("1", "01/01/2001", "01:01:2001"); 
var p = from r in dt.AsEnumerable() where 
     Convert.ToDateTime(r["b"]) == Convert.ToDateTime("01/01/2001") 
     select r; 

System.Diagnostics.Debug.WriteLine(p.ToList()[0][0]); 

作品:Convert.ToDateTime(r["b"])

失敗Convert.ToDateTime(r["c"])

+0

切換你的解決方案我得到這個異常:字符串不被認爲是一個有效的日期時間。 –

+0

這是因爲您擁有的字符串不是日期時間格式。 YOu永遠不會將無效字符串轉換爲日期時間。我的解決方案很好。您需要確保字段中和'newDate'中的字符串是日期類型。例如「01/01/2001」 –

+0

DateTime dt; dt = DateTime.Now; string newDate; newDate = dt.ToString(「dd/MM/yy」);新日期具有相同格式的第一個日期 –

0

基本上它意味着,SQLite不明白的功能Convert.ToDateTime。這是延遲執行。

在過濾結果之前,您可以先強制執行。僅在表格不大時使用,因爲它會獲取所有重新記錄,然後執行過濾。

嘗試以下操作:

from x in db.Table<FicheTechnique>().ToList() 
        .Where Convert.ToDateTime(x.FirstDate) <= Convert.ToDateTime(newDate) 
        .Select x;