我有DataTable一個DateTime存儲為string像“二零一七年十二月二十零日”。我想選擇過去 6 個月內(nèi)的所有行。我可以用一個foreach:foreach (DataRow dr in dsErgebnisse.Tables[0].Rows){ if (Convert.ToDateTime(dr[6].ToString()) > DateTime.Now.AddMonths(-6)) { dsTemp.Tables[0].ImportRow(dr); }}這給了我 3.613 行。我嘗試通過選擇來檢查它是否更快:DataRow[] foundRows = dsErgebnisse.Tables[0].Select("DATUM > '" + DateTime.Now.AddMonths(-6).ToShortDateString() + "'");DATUM是我的列,其中DateTime存儲為字符串。這給了我 2.624 行。為什么有區(qū)別?我試圖在 select 語句中使用 convert 但我失敗了System.Data.EvaluateException:foundRows = dsErgebnisse.Tables[0].Select("Convert(DATUM, 'System.DateTime') > '" + DateTime.Now.AddMonths(-6).ToShortDateString() + "'");
1 回答

鴻蒙傳說
TA貢獻1865條經(jīng)驗 獲得超7個贊
規(guī)則 0:停止使用
DataTable
......永遠*規(guī)則 1:不要將日期/時間值存儲為字符串;將它們存儲為
DateTime
或類似規(guī)則 2:如果您忽略規(guī)則 0 和 1,請確保以可排序的順序存儲它們,例如“2017-12-20”
由于您違反了所有這些規(guī)則,因此大多數(shù)賭注都失敗了,您可能必須通過遍歷行、獲取值并進行自己的轉(zhuǎn)換來手動執(zhí)行過濾器。LINQ via.AsEnumerable()
可能會有所幫助;它當(dāng)然不能讓它變得更糟:)
*=在DataTable
適當(dāng)?shù)牡胤接幸恍〔糠謫栴};如果您事先了解數(shù)據(jù)的架構(gòu)足以發(fā)出Select
查詢:這不是其中之一
- 1 回答
- 0 關(guān)注
- 754 瀏覽
添加回答
舉報
0/150
提交
取消