मैं अक्सर publishStart
, publishEnd
जैसे क्षेत्रों से चयन करता है सीमित करने के लिए की जरूरत है, active
Linq विस्तार विधि
मैं कई अलग अलग तालिकाओं में इन क्षेत्रों की है। तो केवल पंक्तियों चयनित होना चाहिए, कि कर रहे हैं
a: active == true;
b: publishStart < now;
c: publishEnd > now;
तो, उदाहरण के लिए:
db.myTable.SingleOrDefault(a => (a.ID == _theID
//now the active and start-end part:
&& ((a.publishEnd > DateTime.Now) || (a.publishEnd == null))
&& ((a.publishStart <= DateTime.Now) || (a.publishStart == null))
&& a.active == true));
इसमें कुछ समय लंबा है, इसलिए मुझे आश्चर्य है कि अगर यह एक बनाने के लिए संभव है - विधि (विस्तार?) जैसे:
db.myTable.SingleOrDefault(a => (a.ID == _theID).isActive()
जहां isActive()
ऊपर स्निपेट की 3 लाइनों प्रदान करता है।
मैं यह कैसे कर सकता हूं? क्या कोड साफ़ करने का कोई बेहतर तरीका है?
ये सभी अलग-अलग तालिकाओं में हैं, है ना? संदर्भ में खुलासा नहीं किया गया एक भी टेबल? मैं पूछता हूं क्योंकि आप प्रीम्बल में इंगित करते हैं कि गुण अलग-अलग तालिकाओं पर हैं, जबकि आप फ़िल्टर में केवल एक संदर्भ का उपयोग करते हैं। यदि वे सभी एक ही टेबल पर हैं, तो यह आसान है, अगर वे अलग-अलग तालिकाओं पर हैं, तो यह सही जवाब को काफी बदल देता है। – casperOne
उस स्थिति में आपको ** 'सिंगलऑफिफॉल्ट' ** से पहले 'IsActive' ** को कॉल करने की आवश्यकता होगी ताकि आप केवल एक ही लेने से पहले सक्रिय आइटम फ़िल्टर कर सकें, जब तक कि उस आईडी के साथ केवल एक ही आइटम न हो। – Servy