2012-11-21 27 views
7

私は私のaspxコードでこのnull可能なdatetimeから日付を取得していますか?</p> <pre><code>q = q.AsQueryable() .Where(c => c.CallNextDate.Date < DateTime.Now.Date) .ToList(); </code></pre> <p>しかし<code>c.CallNextDate.Date</code>は使用できません。私はこのように、このLINQを使用しています後ろ

public DateTime? CallNextDate {get;set;} 

のようにNULL可能日時としての私のモデルにフィールドを宣言しました。

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

それとも、その上でフィルタリングする場合は、あまりにも:それは

答えて

16

さて、あなたはすでにそれがnull以外であることを知っているならば、あなたは根本的なnull非許容値を取得するためにValueを使用することができます修正する方法を提案してください。 :

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(); 

これにより、一貫性が向上します。ところで、実際にシステムのローカル日付が本当に必要かどうかを検討する必要があります。

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

しかし、あなたがする必要があります。

(?。あなたは間違いなく方法によって、AsQueryableを使用する必要がないということは比較的まれです)

+1

「GetValueOrDefault()」は何ですか? –

+0

@JonB:もしOPが日付のないすべてのエントリを含んでいたら*うまくいくでしょう。残念ながら、要件は非常に不明です。 –

5

Null許容型は、基になる型を表し、Valueプロパティを持っていますタイプが値を持っていることを確認してください。

q = q.AsQueryable() 
    .Where(c => c.CallNextDate.HasValue && c.CallNextDate.Value.Date < DateTime.Now.Date) 
    .ToList(); 
関連する問題

 関連する問題