我有DataTable一個DateTime存儲為string像“二零一七年十二月二十零日”。我想選擇過去 6 個月內的所有行。我可以用一個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 行。為什么有區別?我試圖在 select 語句中使用 convert 但我失敗了System.Data.EvaluateException:foundRows = dsErgebnisse.Tables[0].Select("Convert(DATUM, 'System.DateTime') > '" + DateTime.Now.AddMonths(-6).ToShortDateString() + "'");
1 回答

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