2009-07-31 14 views
1

私はObjectQueryを受け取り、さまざまなフィルタパラメータの値を受け取るかどうかによってWhere句を追加するメソッドを持っています。メソッドはObjectQueryを返す必要があります。たとえば、私は基本的な日付の比較を行うことができます。 dateX < dateYです。Date/DateTime ine Entity SQLの比較Where Where

は、これは私の現在のコードです:myDateFilterはDateTime.Nowの値を有する

if (myDateFilter != null) 
{ 
    query = query.Where(
     string.Format(
      "it.ExpireDate < cast('{0}' as System.DateTime)", 
      myDateFilter)); 
} 

、このコードは言う:System.Data.SqlClient.SqlException:datetimeデータにvarcharデータ型の変換タイプが範囲外の値になりました。

他のすべてのパラメータは文字列フィルタまたは整数フィルタなので、実装する際に問題はありません。何か案は??

+0

OK、それは'31/7/2009 'の文字列形式を取っている日付を渡そうとしているようですが、私は' 1/1/2009 'を渡すと動作します。 db内のwhatsの文化の違いと、アプリケーションで起こっていること。どのように私は同じ形式でそれらを比較することができます?????またはいくつかの文化不変の方法で... – andrej351

答えて

0

ユーザーがデータを入力する形式を知っている必要があります。 DateTime.Parse関数とParseExact関数を見てみましょう。

http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

あなたは形式を知っていれば有効な日時に任意の入力文字列を解析するためにそれらを使用することができます。文化不変もいくつかあります。

これに対して、長い形式(YYYYMMDD HH:MM:SS)を使用するには、DateTimePickerなどの日付を常に書式設定することをお勧めします。 .Netにそれを伝えるフォーマット文字列がありますが、今は思い出せません。

ユーザー入力から文字列を受け入れる場合は、CurrentCultureを考慮する必要があります(上記のリンクにはヘルプがあります)。