2011-12-28 6 views
9

मुझे यह जांचने की आवश्यकता है कि लिंक की क्वेरी में दो तिथियां बराबर हैं या तिथियां दो अलग-अलग तालिकाओं से आती हैं (पैरामीटर के रूप में नहीं)। मैंने वेब पर मौजूदा समाधान और एसओ में भी देखा है। कुछ मेरे मामले में लागू नहीं हैं और कुछ सुरुचिपूर्ण नहीं हैं। अगर कोई है तो बेहतर वैकल्पिक समाधान की तलाश में है।जांचने के लिए सुरुचिपूर्ण समाधान, यदि दो तिथियां बराबर हैं, तो लिंक (जहां दूसरी तारीख पैरामीटर नहीं है)

नमूना क्वेरी (केवल तारीख अंश तुलना करने की आवश्यकता):

var query = from t1 in Table1 
      join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
      where t1.Id = someId 
       && t1.Date1.Date.Equals(t2.Date2.Date) 

इस एक एक त्रुटि " 'तिथि' Entitiies को LINQ में समर्थित नहीं है के साथ विफल केवल initializers, इकाई के सदस्यों, और इकाई नेविगेशन गुण। समर्थित हैं "

पोस्ट 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported में एक समाधान है जो दिन, महीना और वर्ष अलग से तुलना करता है। मैंने इसे एक विस्तार विधि में लपेटने की कोशिश की, लेकिन ऐसा लगता है कि लिंक को एक्सटेंशन विधियों को पसंद नहीं है। चूंकि दूसरी तारीख एक चर नहीं है, इसलिए मैं लिंक किए गए पोस्ट में उल्लिखित अन्य समाधान का उपयोग नहीं कर सकता (और मैं कुछ कारणों से लिंक के अंदर की तारीख पर "AddDays" विधि को कॉल नहीं कर सकता)। ऐसा लगता है कि लिंक में डेट एपीआई के साथ कई सीमाएं हैं।

+0

क्या दिन, महीना और वर्ष की अपेक्षा अलग-अलग काम करता है? – dasblinkenlight

+0

हां, यह काम करता है अगर मैं उन्हें अलग से तुलना करता हूं। – RKP

उत्तर

16

EntityFunctions क्लास से DiffDays का उपयोग करने का प्रयास करें। व्यक्तिगत रूप से इसका कभी भी उपयोग नहीं किया गया, लेकिन इस तरह प्रयास करने के लायक:

var query = from t1 in Table1 
     join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
     where t1.Id = someId 
      && EntityFunctions.DiffDays(t1.Date1, t2.Date2) == 0 
+1

बहुत बहुत धन्यवाद। यह एक आकर्षण की तरह काम करता है। मैंने जेनरेट किए गए एसक्यूएल को देखा और दिनांक तुलना DATEDIFF (दिन, t1.Date1, t2.Date2) = 0 में परिवर्तित हो गई है, जो सही है। मुझे इससे पहले "EntityFunctions" के बारे में पता नहीं था। एक बार फिर से धन्यवाद। – RKP

+0

आपका स्वागत है, खुशी हुई है कि मदद मिली :) – Reniuz

+0

उल्लेख करना भूल गया कि मैंने आपके कोड का थोड़ा संशोधित संस्करण उपयोग किया है। मैं अपनी पोस्ट में उल्लिखित "डेटटाइम" की "तिथि" संपत्ति का उपयोग नहीं कर सकता, इसलिए मैंने "EntityFunctions.DiffDays (t1.Date1, t2.Date2) == 0" का उपयोग किया और यह काम किया। – RKP

0

जहां तक ​​मुझे याद है कि आप == operator का उपयोग करके तिथियों की तुलना कर सकते हैं।

+0

'==' दिनांक और समय दोनों भागों की तुलना करता है; ओपी केवल तारीख की तुलना करना चाहता है। – dasblinkenlight

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