2012-11-21 10 views
7

मैं इसशून्य से डेटटाइम से तारीख हो रही है?

public DateTime? CallNextDate {get;set;} 
मेरी aspx कोड में

की तरह नल दिनांक के रूप में अपने मॉडल में एक क्षेत्र घोषित किया है पीछे मैं इस तरह इस LINQ का उपयोग कर रहा:

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

लेकिन c.CallNextDate.Date उपलब्ध नहीं है।

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

या भी आपको लगता है कि पर फ़िल्टर करना चाहते हैं: कृपया इसे

उत्तर

16

ठीक है, अगर आप पहले से ही पता है कि यह गैर-शून्य है, तो आप 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(); 

इससे आपको अधिक स्थिरता मिल जाएगी। आपको वास्तव में विचार करना चाहिए कि क्या आप निश्चित रूप से सिस्टम स्थानीय दिनांक चाहते हैं।

(आप निश्चित रूप से AsQueryable उपयोग करने के लिए, वैसे की ज़रूरत है कि अपेक्षाकृत दुर्लभ है?।)

+1

क्या, 'GetValueOrDefault() 'के लिए कोई प्यार नहीं है? –

+0

@ जोनबी: यह काम करेगा * अगर * ओपी सभी प्रविष्टियों को बिना किसी तारीख के शामिल करना चाहता था। दुर्भाग्य से आवश्यकताओं बहुत अस्पष्ट हैं। –

5

Nullable प्रकार एक मूल्य संपत्ति जो अंतर्निहित प्रकार का प्रतिनिधित्व करता है:

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(); 
संबंधित मुद्दे