use*_*963 3 c# datatable datetime
我有一个数据表xData,该表的DateTime列精度为毫秒,我需要提取与确切时间相匹配的行(以毫秒为单位),但语法不正确。
我试过了
DateTime dt = timeStampList[i];
string str = dt.ToString("yyyy-MM-dd HH:mm:ss.fff");
DataRow[] result = xData.Select("TimeStamp2 = " + str);
foreach (DataRow row in result)
{
Console.WriteLine("{0}, {1}", row[0], row[1]);
}
Run Code Online (Sandbox Code Playgroud)
但
DataRow[] result = xData.Select("TimeStamp2 = " + str);
Run Code Online (Sandbox Code Playgroud)
导致错误:
语法错误:'16'运算符后缺少操作数。
我进行了搜索,但是大多数示例仅显示如何按日期而不是datetime毫秒进行选择。
问题是您必须将要查找的日期/时间传递给过滤器。
起初,我认为亚秒级精度不受支持,Select但根据德米特里(Dmitry)的回答却是。
另一种方法是使用Linq to DataSet,这可以避免序列化日期/时间:
DateTime dt = timeStampList[i];
IEnumerable<DataRow> selectedRows =
xData.AsEnumerable().Where(row => (row.Field<DateTime>("TimeStamp2") == dt));
foreach (DataRow row in selectedRows)
{
Console.WriteLine("{0}, {1}", row[0], row[1]);
}
Run Code Online (Sandbox Code Playgroud)
如果TimeStamp2列具有DateTime类型,则应将DateTime字符串用#char括起来:
DataRow[] result = xData.Select("TimeStamp2 = #" + str + "#");
Run Code Online (Sandbox Code Playgroud)
请参阅示例部分。
如果TimeStamp2列的类型是a string,则将值括在引号中':
DataRow[] result = xData.Select("TimeStamp2 = '" + str + "'");
Run Code Online (Sandbox Code Playgroud)
编辑列类型的
示例代码DateTime:
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("A", typeof (DateTime)));
DateTime dt = new DateTime(2000, 1, 1, 1, 1, 1, 10);
table.Rows.Add(dt);
table.Rows.Add(DateTime.Now);
DataRow[] rows = table.Select("A = #" + dt.ToString("yyyy-MM-dd HH:mm:ss.fff") + "#");
Run Code Online (Sandbox Code Playgroud)
结果:一个DataRow在rows变量。