3

更新しました:

特定の日付に基づいて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」に日付を含む行が存在することは知っていますが。

これが機能しない理由がわからない場合は、助けていただければ幸いです。

ありがとう。

4

3 に答える 3

7

1秒の小数部を含め、提供された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));

同様に、同じ秒内にあるすべての値が必要な場合(ただし、1秒未満の場合もあります)、次を使用できます。

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の呼び出しは、このStackOverflowの質問に対する受け入れられた回答で説明されているように、指定されたDateTimeを整数秒に切り捨てます。

dttemp.LocaleDataTableに現在のカルチャ以外のロケールがある場合に備えて、以前は正しいロケール(CultureInfo)を使用していました。

于 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 に答える