使用DateTime值过滤DataTable

时间:2012-11-21 18:00:44

标签: c#

更新:

我正在尝试根据特定日期过滤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”的行也存在。

不确定为什么这不起作用,感谢任何帮助。

感谢。

3 个答案:

答案 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));

此处有更多信息http://www.csharp-examples.net/dataview-rowfilter/

答案 2 :(得分:1)

使用=代替LIKE

 foundRows = dttemp.Select(String.Format("whn = '{0}'", datevalue));