c# - How to compare dates in Entity Framework with Repository Pattern -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 9 जवाब

मैं करने की कोशिश कर रहा हूँ इकाई की रूपरेखा में कोई क्वेरी इस तरह भंडार पद्धति का उपयोग कर:

नामस्थान: सेवाएं

  सूची से & lt; Data.Item & gt; itemToday = repositoryUser.Get (i = & gt; i.UserId.Equals (user.Id) & amp; & amp; i.Created.Date & LT; DateTime.Now.Date) .ToList ();  

नामस्थान: डेटा (मेरा रिपॉज़िटरी)

  सार्वजनिक आईएनएनमेरेबल & lt; T & gt; जाओ (System.Linq.Expressions.Expression & LT; समारोह के & lt; टी, bool & gt; & gt; expressionFilter); टी & gt; () जहां (expressionFilter)। {This.dbContext.Set करें & lt वापसी; }  

यह इस त्रुटि को फेंक देगा:

निर्दिष्ट प्रकार सदस्य 'तिथि' LINQ में इकाईयों में समर्थित नहीं है

मैं इन सवालों को एक प्रकार की रूपरेखा पद्धति के साथ तारीख प्रकारों को कनवर्ट करने और

के साथ हल करने के लिए मिला ये समाधान एक EF विधि का उपयोग करते हैं जो कि डेटा नामस्थान में संग्रहीत है, और मैं सेवा नाम स्थान पर पूछताछ कर रहा हूं और मुझे सेवा परत में एक रिपॉजिटरी फ़ंक्शन को कॉल नहीं करना चाहिए, है ना? तो आप यह कैसे कर सकते हैं?

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

  सार्वजनिक सूची & lt; Data.Item & gt; जाओ और & lt; टी & gt; (पूर्णांक आईडी DATETIME, createdBeforeDate) {this.dbContext.Set करें & lt वापसी; टी & gt; () जहां (i = & gt;। I.UserId.Equals (आईडी) & amp; & amp; SqlFunctions.DateDiff ( "दिन", I। बनाया गया, पूर्वनिर्मित) & gt; 0)) .ओलिस्ट (); }  

आप इन प्रकार के परिदृश्यों के लिए SqlFunctions वर्ग का उपयोग कर सकते हैं आप "दिवस" ​​(मैं इस सवाल का जवाब मिला:) के एक पैरामीटर के साथ SqlFunctions.DateDiff फ़ंक्शन का उपयोग कर सकते हैं।

अपने मामले में मेरा मानना ​​है कि SqlFunctions.DateDiff ( "DAY", i.Created, DateTime.Now) & gt; 0) काम करना चाहिए

  सूची & lt; Data.Item & gt; itemToday = repositoryUser.Get (i = & gt; i.UserId.Equals (user.Id) & amp; & amp; SqlFunctions.DateDiff ( "दिन", i.Created, DateTime.Now) & gt; 0)) .ToList ();   

एक पक्ष नोट के रूप में DateTime.Today का उपयोग इसके बजाय DateTime.Now.Date

कर सकते हैं

Comments