DataTable Select by exact DateTime
我有一个数据表
我尝试过
1 2 3 4 5 6 7 8 | 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]); } |
但
1 | DataRow[] result = xData.Select("TimeStamp2 =" + str); |
导致错误:
Syntax error: Missing operand after '16' operator.
我已经搜索过,但是大多数示例仅显示如何按日期进行选择,而不是完整的
问题是您必须将要查找的日期/时间传递给过滤器。
起初,我认为
另一种方法是使用Linq to DataSet,这可以避免序列化日期/时间:
1 2 3 4 5 6 7 8 9 | 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]); } |
如果
1 | DataRow[] result = xData.Select("TimeStamp2 = #" + str +"#"); |
请参阅"示例"部分。
如果
1 | DataRow[] result = xData.Select("TimeStamp2 = '" + str +"'"); |
编辑
1 2 3 4 5 6 |
结果:
当涉及到高达纳秒级的精度时,我在使用DateTime文字时也遇到了问题。如果可能,您可以尝试在表中使用long数据类型,并使用
您的查询将转换为
1 2 3 | DateTime dt = timeStampList[i]; long dtTicks = dt.Ticks; DataRow[] result = xData.Select("TimeStamp2 =" + dtTicks); |
我发现在日期范围之间进行搜索时,这种方法也很有效。
如果您恰巧将值作为DateTime返回,则可以很容易地通过
1 |