Kᴀτ*_*ᴀτᴢ 0 c# sql datatable select datetime
我有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);
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我3.613行.
我尝试用select来检查它是否更快:
DataRow[] foundRows = dsErgebnisse.Tables[0].Select("DATUM > '" + DateTime.Now.AddMonths(-6).ToShortDateString() + "'");
Run Code Online (Sandbox Code Playgroud)
DATUM
是我的列,其中DateTime
存储为字符串.这给了我2.624行.
为什么会有区别?我尝试在select语句中使用convert但是我失败了System.Data.EvaluateException
:
foundRows = dsErgebnisse.Tables[0].Select("Convert(DATUM, 'System.DateTime') > '" + DateTime.Now.AddMonths(-6).ToShortDateString() + "'");
Run Code Online (Sandbox Code Playgroud)
DataTable
...只是永远*DateTime
或类似由于你已经破坏了所有这些规则,大多数赌注都已关闭,你可能需要通过遍历行,获取值和进行自己的转换来手动执行过滤.LINQ via .AsEnumerable()
可能有所帮助; 它当然不能让它变得更糟:)
*=在DataTable
适当的情况下存在一小部分问题; 如果你事先知道数据的模式就足以发出一个Select
查询:这不是其中之一