我有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 回答
![?](http://img1.sycdn.imooc.com/54584ef20001deba02200220-100-100.jpg)
鸿蒙传说
TA贡献1865条经验 获得超7个赞
规则 0:停止使用
DataTable
......永远*规则 1:不要将日期/时间值存储为字符串;将它们存储为
DateTime
或类似规则 2:如果您忽略规则 0 和 1,请确保以可排序的顺序存储它们,例如“2017-12-20”
由于您违反了所有这些规则,因此大多数赌注都失败了,您可能必须通过遍历行、获取值并进行自己的转换来手动执行过滤器。LINQ via.AsEnumerable()
可能会有所帮助;它当然不能让它变得更糟:)
*=在DataTable
适当的地方有一小部分问题;如果您事先了解数据的架构足以发出Select
查询:这不是其中之一
- 1 回答
- 0 关注
- 702 浏览
添加回答
举报
0/150
提交
取消