2

動的 linq を使用して、適度に複雑な検索の where 句を作成していますが、日付に関する問題に遭遇しました。

ユーザーが「作成日」でフィルタリングして、その日付より前、その日付、またはその日付より後のいずれかを検索できるようにしたいと考えています。

次のような動的クエリを作成するために使用したこの回答を見つけました.Year == @0.Year && created.Month == @0.Month && created.Day == @0.Day)"。これは、正確に等しい日付の検索には問題なく機能しますが、前または後の何かを検索しようとするとうまくいきません。私が得た最も遠いのは"(created.Year >= @0.Year && created.Month >= @0.Month && created.Day > @0.Day)、現在の月以外では機能しないことです((今日以降)を検索した場合、日付の1か月後であっても、27日を超える結果のみが表示されます探しました。)

私も使っDateTime.Compareてみましたが、うまくいきませんでしたし、DateTime.Date` を比較しようとしてもうまくいきませんでした。

T-SQL を直接使用する以外に、これを実現する方法はありますか?

編集:と"(created.Date == @0.Date)"

ここに画像の説明を入力

4

1 に答える 1

0

「オン」の比較に既存のコードを使用し、Corakが提案したように、前後に厳密>または前後に実行することになりました。<

if (Comparison == ComparisonType.Equals) {
    return string.Format("({0}.Year {2} @{1}.Year && {0}.Month {2} @{1}.Month && {0}.Day {2} @{1}.Day)", FieldName, index, ComparisonType.Equals.Evaluate()); //workaround for "exactly equals date"
} else if (Comparison == ComparisonType.Less_Than) {
       Value = ((DateTime)Value).Minimize(); //set the time values of the date to the minimums (00:00:00 000)
} else if (Comparison == ComparisonType.Greater_Than) {
       Value = ((DateTime)Value).Maximize(); //set the time values of the date to the maximums (23:59:59 999)
}

return string.Format("({0} {1} @{2})", FieldName, Comparison.Evaluate(), index);
于 2013-05-27T17:04:45.470 に答える