2011-01-14 13 views
8

के लिए दिनांक की केवल वर्ष का उपयोग करके नीचे दिए गए LINQ कथन में, मैं 2010 में परीक्षा तिथि वाले लोगों का चयन करना चाहता हूं। परीक्षा की तारीख को डेटाटाइम के रूप में संग्रहीत किया जाता है क्योंकि वास्तविक तिथि और समय का उपयोग किया जाता है अन्य अनुप्रयोगों। Exzam तारीख की तुलना केवल '2010' की तुलना करने का सबसे सुरुचिपूर्ण, आसान, सबसे अच्छा तरीका क्या है। या, क्या मुझे तुलना करना चाहिए, = =, परीक्षा दिनांक 1/1/2010 तक?WHERE स्थिति

var active = dc.People.Where(x => x.exam >= 2010) 
     .Select(x => new {x.ContactID, x.FirstName, x.LastName}) 
        ); 

x.MostRecent == DateTime.Parse("1/1/2010").Year 

संपादित करें # 1

मैंने सोचा कि मैं परीक्षा तारीख को एक .Year देखना चाहिए, लेकिन मैं ऐसा नहीं किया। यहां कुछ पोस्ट देखने के बाद मैं वापस गया और यह काम पाया ...

.Where(x => x.exam.Value.Year == 2010) 

क्यों है। वॉल्यूम का उपयोग करने के लिए आवश्यक है। प्रिय? परीक्षा एक नामुमकिन डेटाटाइम है।

var active = dc.People.Where(x => x.examdate.year == 2010) 
     .Select(x => new {x.ContactID, x.FirstName, x.LastName}) 
        ); 
+0

'। वैल्यू 'आवश्यक है क्योंकि' परीक्षा 'आपके मॉडल में एक शून्य क्षेत्र है। (मुझे लगता है कि आपके डेटाबेस में संबंधित कॉलम NULLs को अनुमति देता है।) –

+0

@ स्कॉट - यह सही है, डीबी उस कॉलम में नल की अनुमति देता है। धन्यवाद। – DenaliHardtail

उत्तर

18

तुम बस का उपयोग कर सकते हैं -

+0

ऊपर मेरा संपादन देखें। मुझे उपयोग करने की ज़रूरत क्यों थी। वैल्यू.प्रिय? – DenaliHardtail

+0

@ स्पेशलएजेंट_डब्ल्यू 436: बिल्कुल इसलिए कि 'लोग.एक्सम' एक 'शून्य' '(उर्फ,' डेटटाइम '') है। – jason

+0

स्पष्टीकरण के लिए धन्यवाद! अब पूरी तरह से साफ़ करें। – DenaliHardtail

0

मैं सबसे खूबसूरत तरीका नहीं पता, लेकिन यह सबसे आसान तरीका है कि आप इसे संभालने examdate कर सकते हैं datetime col जो आप अपने तारीख की दुकान और I want to select people with an exam date in 2010 पर आधारित है DateTime पर Year संपत्ति:

var active = from p in dc.People 
      where p.Exam.Year >= 2010 
      select new { 
       p.ContactID, 
       p.FirstName, 
       p.LastName 
      }; 

क्यों .Value .Year का उपयोग करने के लिए आवश्यक है? परीक्षा एक नामुमकिन डेटाटाइम है।

बिल्कुल क्योंकि Exam एक Nullable<DateTime> है। आप की तरह

DateTime? exam; 

टिप्पणी Nullable<DateTime> का एक उदाहरण की घोषणा जब कि exam एक DateTime नहीं है और इसलिए आप सीधे DateTime के गुणों का उपयोग नहीं कर सकते हैं। की एक ठोस उदाहरण प्राप्त करने के लिए DateTime आप Nullable<DateTime> पर Value संपत्ति (सभी Nullable<T> इस संपत्ति है) ताकि

DateTime instance = exam.Value; 

एक DateTime यह सोचते हैं कि examnull नहीं है का उपयोग करें। इसलिए आप

int year = instance.Year; 

कह सकते हैं और जाहिर है, संक्षिप्तता

int year = exam.Value.Year; 

नोट के लिए है कि इस करता है, तो exam.HasValue गलत है फेंक देते हैं।