1

簡単な LINQ クエリがあります。データベースにエントリがある場合にのみ、DateDisable をチェックしたいと思います。ユーザーが無効にする日付を選択しない場合、エントリは常に表示されます。誰かがlinq内に条件文を追加する方法を教えてください

return (from promo in context.Promoes
        where promo.DateEnable <= DateTime.Today
        where promo.DateDisable >= DateTime.Today
        orderby promo.SortOrder
        select promo).ToList();
4

1 に答える 1

2

が であるDateEnableとするDateTime?と、次のことができます。

// Get today.
DateTime today = DateTime.Today;

return (
    from promo in context.Promoes
    where 
        promo.DateEnable <= today &&
        (promo.DateDisable == null || promo.DateDisable >= today)
    orderby promo.SortOrder
    select promo
).ToList();

基本的に、日付が今日より大きいかどうかを確認する必要がありnull ます

また、ステートメントの外部で値をキャプチャする必要があります。LINQ プロバイダーがDateTime.Todayデータベース側で正しく変換されることは保証されていません。

ただし、遅延実行のため、クエリの実行を長時間待機すると、today期待する値が得られない可能性があることに注意してください (クエリの宣言と実行の間の時間が真夜中を過ぎた場合)。

もちろん、データベース サーバーがアプリケーション サーバーとは異なるタイムゾーンにある場合はDateTime.Today、LINQ プロバイダーによって正しく処理されていることを確認し (サーバー上で実行されるようにする必要があります)、比較する場合はそれを使用する必要があります。 DB サーバー上の時間。プロバイダーが正しく変換を処理しない場合は、ストアド プロシージャに頼ってそれを呼び出す必要があります。DateTime.Today

于 2012-06-25T14:10:51.877 に答える