3

更新:

我正在尝试根据特定日期过滤 DataTable。我的数据表有一列“whn”,其中包含日期。数据表中的示例日期:

{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”中包含日期的行。

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

谢谢。

4

3 回答 3

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 截断为整数秒,如对此 StackOverflow 问题的接受答案中所述。

注意我曾经dttemp.Locale使用正确的语言环境 (CultureInfo),以防您的 DataTable 具有与当前文化不同的语言环境。

于 2012-11-21T18:33:33.280 回答
2

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

应该是

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

更多信息在这里http://www.csharp-examples.net/dataview-rowfilter/

于 2012-11-21T18:08:20.693 回答
1

使用=代替LIKE

 foundRows = dttemp.Select(String.Format("whn = '{0}'", datevalue));
于 2012-11-21T18:17:21.117 回答