亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

DataTable.Select 將日期時間存儲為字符串

DataTable.Select 將日期時間存儲為字符串

C#
UYOU 2021-08-22 17:20:20
我有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查詢:這不是其中之一


查看完整回答
反對 回復 2021-08-22
  • 1 回答
  • 0 關注
  • 753 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號