LINQを介して時間なしでDateTimeを比較する方法は?
質問
私は
var q = db.Games.Where(t => t.StartDate >= DateTime.Now).OrderBy(d => d.StartDate);
の時間部分を含めて比較しています。
DateTime
. 本当に必要ない。
時間がなくてもできる方法とは?
ありがとうございます。
どのように解決するのですか?
単に
Date
プロパティを使用します。
var today = DateTime.Today;
var q = db.Games.Where(t => t.StartDate.Date >= today)
.OrderBy(t => t.StartDate);
を明示的に評価したことに注意してください。
DateTime.Today
一度だけ
で、クエリの一貫性が保たれます。そうでなければ、クエリが実行されるたびに、さらに
内で
を実行するたびに
Today
が変わる可能性があり、一貫性のない結果を得ることになります。例えば、以下のようなデータがあったとします。
Entry 1: March 8th, 8am
Entry 2: March 10th, 10pm
Entry 3: March 8th, 5am
Entry 4: March 9th, 8pm
確かに
どちらも
のエントリが結果に含まれるはずで、あるいは
どちらも
のどちらにも該当しないはずです。
DateTime.Today
を評価し、それが
が変化する
を 3 月 9 日に変更した場合、エントリ 1、2、4 が表示される可能性があります。
もちろん
DateTime.Today
の中の日付に興味があることを仮定しています。
ローカル
の日付に興味があると仮定しています。これは適切ではないかもしれません。
は絶対に
を確認する必要があります。あなたは
かもしれない
を使いたい
DateTime.UtcNow.Date
を使いたいかもしれません。残念ながら
DateTime
は滑りやすい獣で
...
編集: また、以下の呼び出しを削除することもできます。
DateTime
への呼び出しを完全に取り除くこともできます。これはコードのユニットテストを困難にします。
野田時間
では、この目的のために特別なインタフェースがあります (
IClock
) があり、適切に注入されることが期待されます。本番用の実装として "system time" があり、テスト用の実装として "stub" がありますが、自分で実装することもできます。
もちろん、Noda Timeを使わなくても、同じアイデアを使うことができます。この特定のコードの部分をユニットテストするために、あなたは日付を渡したいかもしれませんが、あなたはそれを どこか - から取得することになり、時計を注入することで をすべて をテストすることができます。
関連
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Pythonでタイムゾーンを意識したdatetimeオブジェクトを作るには?
-
[解決済み] Windowsのコマンドラインで、現在の日付/時刻をファイル/フォルダー名で使用するために適切な形式で取得するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】URLから画像をダウンロードする方法