7

このように、モデル内のフィールドを null 許容の日時として宣言しました

public DateTime? CallNextDate {get;set;}

私のaspxコードビハインドでは、このlinqを次のように使用しています:

q = q.AsQueryable()
    .Where(c => c.CallNextDate.Date < DateTime.Now.Date )
    .ToList();

しかし、 c.CallNextDate.Date利用できません。修正方法を提案してください

4

3 に答える 3

18

それが null でないことが既にわかっている場合は、 を使用Valueして、基になる null 非許容値を取得できます。

q = q.AsQueryable()
     .Where(c => c.CallNextDate.Value.Date < DateTime.Now.Date)
     .ToList();

または、それもフィルタリングしたい場合:

q = q.AsQueryable()
     .Where(c => c.CallNextDate.Value != null &&
                 c.CallNextDate.Value.Date < DateTime.Now.Date)
     .ToList();

ただし、今日の日付を一度取得して、クエリ全体で再利用することを強くお勧めします。

var today = DateTime.Today;
q = q.AsQueryable()
     .Where(c => c.CallNextDate.Value != null &&
                 c.CallNextDate.Value.Date < today)
     .ToList();

これにより、より一貫性が得られます。ところで、システム local dateが本当に必要かどうかを検討する必要があります。

(ちなみに、絶対に を使用する必要がありますAsQueryableか?それは比較的まれです。)

于 2012-11-21T17:36:38.600 に答える
5

Null 許容型には、基になる型を表す Value プロパティがあります。

q = q.AsQueryable()
    .Where(c => c.CallNextDate.Value.Date < DateTime.Now.Date )
    .ToList();

ただし、型に値があることを確認する必要があります。

q = q.AsQueryable()
    .Where(c => c.CallNextDate.HasValue && c.CallNextDate.Value.Date < DateTime.Now.Date )
    .ToList();
于 2012-11-21T17:37:33.420 に答える