为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 702 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信