特定の日付のデータ行をフィルタリングしようとしています:
現在のコードはのディクショナリを受け取り、次のようにクエリ可能にフィルタを適用します。
queryable = pageSettings.FiltersDictionary.Aggregate(queryable, (current, keyValuePair) =>
current.Where(keyValuePair.Key + ".ToString()" + ".Contains(\"" + keyValuePair.Value + "\")"));
これから生成されたSQLは、次のWHERE句を適用します。
WHERE CAST( [Extent1].[TimeStarted] AS nvarchar(max)) LIKE N'%2015-05-05%'}
使用する
SELECT CONVERT(nvarchar(max), getdate())
SQL Serverが変換されたDateTimeをどのように構造化するかを確認すると、次のようにフォーマットされているため、整列しないことがわかります。
May 18 2016 3:55PM
DateTime型のプロパティにカスタムのwhere句を追加しようとしましたが、 "LINQ to Entities"は 'ToString( "MMMM-DD-YYY")'呼び出しが好きではないようで、エラーを生成します。
2015-05-05などの日付を指定して、2015年5月5日まで更新できるようにしたいのですが、これを機能させるために明らかなものがないのですか?
次の(ベアボーン)例は私の問題を解決しました:
DateTime givenDate = DateTime.Parse(pair.Value);
string dateTimeConverted = givenDate.ToString("MMMM d yyyy");
queryable = queryable.Where(pair.Key + ".ToString()" + ".Contains(\"" + dateTimeConverted + "\")");
SQL Serverにも月と日の間の2つのスペースがあることに注意してください。これは、 "LIKE"句が何かと一致するために必要です。