更新:
我正在尝试根据特定日期过滤DataTable。 我的数据表有一个包含日期的列“whn”。来自DataTable的示例日期:
{21/02/2012 10:03:53} object {System.DateTime}
以下是我用来尝试过滤DataTable的代码:
String datevalue= "21/02/2012 10:03:53";
DataRow[] foundRows;
foundRows = dttemp.Select(String.Format("whn = '{0}'", datevalue));
然而,这不起作用并返回0行。即使我知道包含日期“datevalue”的行也存在。
不确定为什么这不起作用,感谢任何帮助。
感谢。
答案 0 :(得分:7)
如果要与提供的DateTime完全匹配,包括一秒的分数,则应使用具有足够精度的DateTime格式。可能是往返格式(“o”)是一个不错的选择:
foundRows = dttemp.Select(String.Format(dttemp.Locale, "whn = '{0:o}'", datevalue));
但是,您更希望匹配属于某个范围的值。例如,如果您希望所有具有相同日期但一天中任何时间的值都可以使用:
foundRows = dttemp.Select(String.Format(dttemp.Locale, "whn >='{0:o}' AND whn < '{1:o}'",
datevalue.Date, datevalue.AddDays(1).Date));
同样,如果您希望所有值都在同一秒内(但可能只有一秒),您可以使用:
DateTime from = dttemp.AddTicks( - (dttemp.Ticks % TimeSpan.TicksPerSecond));
foundRows = dttemp.Select(String.Format(dttemp.Locale, "whn >='{0:o}' AND whn < '{1:o}'",
from, from.AddSeconds(1)));
对AddTicks的调用会将提供的DateTime截断为整数秒,如this StackOverflow question的已接受答案中所述。
注意我使用dttemp.Locale
来使用正确的区域设置(CultureInfo),以防您的DataTable具有当前文化以外的区域设置。
答案 1 :(得分:2)
foundRows = dttemp.Select("whn LIKE '{0}'",datevalue);
应该是
foundRows = dttemp.Select(String.Format("whn LIKE '{0}'",datevalue));
答案 2 :(得分:1)
使用=
代替LIKE
foundRows = dttemp.Select(String.Format("whn = '{0}'", datevalue));