2012-03-04 9 views
6

मेरे पास मेरी तालिका में DateTime कॉलम है।लिंक से SQL में डेटाटाइम कॉलम से महीना नाम कैसे प्राप्त करें?

Linq में SQL क्वेरी के लिए, मैं सिर्फ उस क्षेत्र

कैसे है कि के लिए Linq क्वेरी लिखने के लिए का महीना भाग की ज़रूरत है?

उत्तर

1

कुछ की तरह:

string monthName = dataContext.GetTable<TableName>() 
           .FirstOrDefault(t => t.DateTimeColumn) 
           .ToString("MMM");    
6

ठीक है, तीन विकल्प मैं तुरंत के बारे में सोच सकते हैं: वापस खींचो पूरे DateTime

  • , और फिर महीने निकालने और उसे फ़ॉर्मेट क्लाइंट साइड
  • डेटाबेस से महीने पहले वापस खींचने के लिए DateTime.Month का उपयोग करें, फिर इसे क्लाइंट-साइड
  • फ़ॉर्मेटिंग प्राप्त करने का प्रयास करें (रूपांतरण पाठ ersion करने के लिए) डेटाबेस

व्यक्तिगत तौर पर मैं नहीं तीसरे विकल्प की कोशिश करेगा पर काम करने की - यह मेरे लिए लगता है जैसे यह काम करने के लिए, कम से कम प्रयास का एक बहुत बिना संभावना बहुत कम है।

मुझे लगता है मैं चाहते वास्तव में सिर्फ DateTime वापस खींच, और सब कुछ क्लाइंट साइड से करते हैं। ऐसा करना बहुत आसान है, और यह काम करने के लिए बाध्य है। मुझे उम्मीद है कि DateTime.Monthशायद काम करेगा, लेकिन आप बहुत अधिक नेटवर्क बैंडविड्थ सहेजने वाले नहीं हैं, और आपको सर्वर ऐसा करने के लिए मिल जाएगा जो क्लाइंट के लिए संभवतः उतना ही आसान है।

ध्यान दें कि यदि आप अभी भी एक प्रश्न के रूप में परिणाम चाहते हैं, तो आप शेष क्वेरी को क्लाइंट-साइड करने के लिए AsEnumerable का उपयोग कर सकते हैं। उदाहरण के लिए:

var query = db.Customers 
       .Where(c => c.OrderCount > 500) // Or whatever query you want 
       .Select(c => new { c.Name, c.FirstOrder }) 
       .AsEnumerable() // Do the rest of the query on the client 
       .Select(c => new { c.Name, c.Month = c.FirstOrder.ToString("MMM") }); 

संपादित करें: के रूप में टिप्पणी में बताया गया है, यह सर्वर साइड पर DateTime.Month उपयोग करने के लिए करता है, तो यह वास्तव में परिणाम, उदा को प्रभावित करेगा समझ में आता है

var query = db.Customers.Where(c => c.FirstOrder.Month == 1) 
         ... 

... लेकिन उन मामलों में मैं इसे संख्यात्मक मान जो महत्वपूर्ण है, नहीं नाम महीने के है होने की उम्मीद थी।

+0

दूसरा विकल्प अच्छा है यदि आप महीने में फ़िल्टर करना चाहते हैं, लेकिन चयन में पहला विकल्प +1 – rfcdejong

+1

@rfcdejong के लिए जाना ठीक है: हाँ, अच्छा बिंदु - संपादित होगा। –

संबंधित मुद्दे