2013-07-15 16 views
9

मैं एक LINQ क्वेरी मुकदमा लैम्ब्डा भाव में ToShortDateString कॉल करने की आवश्यकता:linq lambda अभिव्यक्ति में ToShortDateString का उपयोग कैसे करें?

toRet.Notification = Repositories 
    .portalDb.portal_notifications.OrderByDescending(p =>  p.id) 
    .FirstOrDefault(p => p.date.ToShortDateString() == shortDateString); 

लेकिन मैं त्रुटि मिलती है:

An exception of type 'System.NotSupportedException' occurred in System.Data.Entity.dll but was not handled in user code

Additional information: LINQ to Entities does not recognize the method 'System.String ToShortDateString()' method, and this method cannot be translated into a store expression.

मैं क्या कर सकते हैं, यह देखते हुए कि मैं ToShortDateString() उपयोग करने के लिए की जरूरत है?

धन्यवाद।

+0

इस थ्रेड में सहायता कर सकते हैं: http://stackoverflow.com/questions/5370402/entity-framework-4-linq-how-to-convert-from- डेटाटाइम-टू-स्ट्रिंग-इन-ए-क्वेरी –

+0

इस थ्रेड को मदद करनी चाहिए: http://stackoverflow.com/questions/18233495/linq-to-entities-does-not-recognize-the-method-system-string- टोस्टिंग-विधि –

उत्तर

4

आप shouldn ' जब आप काम कर रहे हों तो एक स्ट्रिंग तुलना को मजबूर करना होगा तिथि/समय डेटा - जैसे ही आप स्ट्रिंग तुलना को मजबूर करते हैं, आपको अचानक से निपटने के लिए स्ट्रिंग स्वरूपित किया जाता है।

var endDate = targetDate.AddDays(1); 

toRet.Notification = Repositories 
.portalDb.portal_notifications.OrderByDescending(p =>  p.id) 
.FirstOrDefault(p => p.date >= targetDate && p.date < endDate); 

(यह मानते हुए कि targetDate है जो कुछ DateTime चर आपको लगता है कि अपने कोड में shortDateString निर्माण करने के लिए इस्तेमाल किया गया था था, और कुछ ही समय मूल्य के साथ पहले से ही एक DateTime है)

+1

आपको बहुत धन्यवाद, डेमियन, यह एक आकर्षण की तरह काम करता है :) –

+0

मैं भी इस मुद्दे के समाधान की तलाश में था। डेटाबेस में मेरे पास 2012-06-06 20: 14: 50.367 जैसी तिथियां हो सकती हैं। 2012.06.06 को पोस्ट किए गए रिकॉर्ड की तलाश करते समय मुझे 2012.06.06 से 2012.06.05 23:59 तक की तारीख को परिवर्तित करना होगा या इसी तरह की चाल के लिए जाना होगा। मैं किसी भी समय समय घटक को हटाकर इसे खोजना चाहता था लेकिन खोज तिथि से नहीं बल्कि डेटाबेस में तिथियां। हर किसी के लिए गेट्स। वास्तव में अच्छा पोर्टल, बहुत उपयोगी जानकारी है। – Mariusz

20

लिंक से इकाइयों को SQL कोड में ToSortDateString विधि परिवर्तित नहीं कर सकता है। आप इसे सर्वर की तरफ नहीं बुला सकते हैं। या तो ग्राहक के पक्ष को छानने (कि ग्राहक के लिए सर्वर से सभी डेटा स्थानांतरित होगा), या server-side functions उपयोग करने के लिए तारीख की तिथि भाग लेने के लिए पर विचार के लिए कदम (आप shortDateString के बजाय DateTime वस्तु पारित होना चाहिए):

EntityFunctions.TruncateTime(p.date) == dateWithoutTime 
+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। FirstOrDefault लिखने के बाद (पी => (EntityFunctions.TuncateTime (p.date) == shortDateString) मुझे त्रुटि मिली है System.Data.EntityCommandExecutionException 'में सिस्टम का एक अपवाद सिस्टम.डाटा.एन्टिटी.dll में हुआ था लेकिन उपयोगकर्ता में संभाला नहीं गया था कोड अतिरिक्त जानकारी: कमांड परिभाषा निष्पादित करते समय एक त्रुटि आई। विवरण के लिए आंतरिक अपवाद देखें। यदि इस अपवाद के लिए हैंडलर है, तो प्रोग्राम सुरक्षित रूप से जारी रखा जा सकता है। –

+0

@ ऑक्टोवियन एप्योर जैसा कि मैंने ऊपर बताया है, स्ट्रिंग 'शॉर्टडेट स्ट्रिंग' को पास करने के बजाय आपको 'डेटटाइम' ऑब्जेक्ट –

+7

पास करना चाहिए, ईएफ 6 का उपयोग करके, मुझे 'डीबीफंक्शन। ट्रंकेटटाइम() ' – Bpainter

-1
:

इसके बजाय, की तरह कुछ है

इसे आजमाएं,

आप नीचे दिए गए कोड के साथ भी उपयोग कर सकते हैं।

Activity = String.Format("{0} {1}", String.Format("{0:dd-MMM-yyyy}", s.SLIDESHEETDATE), String.Format("{0:HH:mm}", s.ENDDATETIME)) 
-3

ToShortDateString() विधि आमतौर पर केवल तारीख के साथ काम करते हैं और समय टिकटों की अनदेखी करने के लिए इस्तेमाल किया।

आपको निम्न क्वेरी का उपयोग करके आज का परिणाम-सेट मिल जाएगा।

Repositories.portalDb.portal_notifications.OrderByDescending(p =>  p.id) 
     .FirstOrDefault(p => p.date.Date == DateTime.Now.Date); 

DateTime की Date संपत्ति का उपयोग कर struct तुम सिर्फ केवल उस तारीख का रिकार्ड लाने सकता है।

नोट: ऑब्जेक्ट्स के लिए लिंक। केवल तभी काम करता है जब आप ToShortDateString() विधि

+1

'p.date.Date' एक अपवाद फेंक देगा। आप LINQ से Entities क्वेरी में ऐसा नहीं कर सकते हैं। – IronMan84

+0

आपने मुझे गलत समझा। 'date' यहां 'डेटटाइम' प्रकार की संपत्ति है। आप इसे 'निर्मितडेट' के साथ बदल सकते हैं। सबसे पहले सवाल देखें ... – rana

+0

मैं समझता हूं कि 'दिनांक' एक 'डेटटाइम' संपत्ति है। मैं जो कह रहा हूं वह यह है कि आप LINQ से इकाइयों में 'date.Date' का उपयोग नहीं कर सकते हैं क्योंकि यह नहीं जानता कि SQL में इसका अनुवाद कैसे करें। – IronMan84

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