दिलचस्प पोस्ट
SQLServer 2005 फ़ंक्शन में डायनामिक एसक्यूएल निष्पादित करना नए मीडियाकोडेक लाइब्रेरी का उपयोग करते हुए एंड्रॉइड पर वीडियो संपीड़न जावास्क्रिप्ट में वैरिएबल टाइप ढूँढना डब्ल्यूपीएफ कॉम्बो बॉक्स प्रदर्शनमबरपाथ, चयनित वैल्यू और चयनित वैल्यू पाथ के साथ भ्रमित यदि कोई सिंक्रनाइज़ (यह) का उपयोग कर सकता है तो एक रीट्रेंट लॉक का उपयोग क्यों करें? Mysql ऑफसेट अनंत पंक्तियाँ आईओएस ऐप के अंदर छवि डाउनलोड और सहेजें मैं एकाधिक सबमिट किए गए डीजेंगो फार्म कैसे बना सकता हूं? गीटोलाइट जीआईटी क्लोन त्रुटि एक एकल मेवेन परियोजना से कई रननेबल जार (शामिल किए गए विभाजन के साथ) बनाएं एंड्रॉइड: आप कैसे जांच करते हैं कि कोई विशेष पहुंच सेवा सक्षम है या नहीं मैं एमवीसी में आइटम्स की एक सूची कैसे पोस्ट कर सकता हूं तैयार स्थिति और प्रदर्शन पता लगाएँ कि क्या इनपुट में सीएसएस का उपयोग करते हुए पाठ है – एक पृष्ठ पर मैं देख रहा हूं और नियंत्रण नहीं करता हूं? किसी स्ट्रिंग को एक सूची में विभाजित कैसे करें?

गतिशील रूप से LINQ क्वेरीज़ उत्पन्न

हमारे पास एक वस्तु है

public class SomeObject { public Name {get;set;} public City {get;set;} public State {get;set} //various other parameters. Let's say there's ~20 } 

स्रोत कोड के पुन: संयोजन के बिना नई LINQ क्वेरी को गतिशील बनाने के लिए क्या संभव है? इसके बजाय, क्वेरी पैरामीटर एक XML संरचना से आते हैं जो डेटाबेस में संग्रहीत और अपडेट किया जाता है।

 var result = from i in someObj where //XML requests Name = 'Bob'...so append this where clause name = 'Bob' 

क्या यह किया जा सकता है?

Solutions Collecting From Web of "गतिशील रूप से LINQ क्वेरीज़ उत्पन्न"

अभिव्यक्ति के पेड़ के साथ यहां एक समाधान है:

 var param = Expression.Parameter(typeof(SomeObject), "p"); var exp = Expression.Lambda<Func<SomeObject, bool>>( Expression.Equal( Expression.Property(param, "Name"), Expression.Constant("Bob") ), param ); var query = someObj.Where(exp); 

मुझे पता है कि यह बहुत जटिल है, लेकिन यह कई बार उपयोगी हो सकता है।

आप निश्चित रूप से डायनामिक लिंक पर एक नज़र डालना चाहते हैं जो आपको क्वेरी की शर्तों को पाठ के रूप में परिभाषित करने की अनुमति देगा।

गतिशील रूप से स्थितियों को जोड़ने के लिए, आप समान वाक्यविन्यास का उपयोग करने के लिए एक क्वेरी में शर्तों को जोड़ सकते हैं;

 if(CategoryIsImportant) myQuery = myQuery.Where("CategoryId=2"); 

जो सभी आप अपनी पसंद के XML प्रारूप में (काफी आसानी से) सांकेतिक शब्दों में बदल सकते हैं

आपके प्रश्न के आधार पर मुझे बताना मुश्किल है, लेकिन कुछ मामलों में आपको गतिशील लिनक की ज़रूरत नहीं है और यह बस ऐसा कर सकता है …

 var result = from o in someObj where (Name == null || o.Name == Name) && (City == null || o.City == City) && (State == null || o.State == State) select o; 

यह अनिवार्य रूप से डेटा को फ़िल्टर्ड होने से रोक देगा, जब प्रश्न में पैरामीटर शून्य है। और यह अभी भी सी # में शॉर्ट सर्किटिंग व्यवहार के लिए धन्यवाद करता है।

शायद डायनामिक लिंक आपकी मदद कर सकता है: गतिशील linq भाग 1: linq गतिशील क्वेरी लाइब्रेरी का उपयोग करना

 query = query.Where("Id = 123 And Age > 18"); 

या आप सीधे अपनी लिनक क्वेरी को हेरफेर कर सकते हैं:

 query = query.Where(x=>x.Id == 5); 

मेरा मानना ​​है कि आपको वास्तव में अभिव्यक्ति पेड़ों में खिसकना होगा मैंने इस पर बहुत दूर खोदा नहीं किया है, इसलिए मैं आपके लिए एक नमूना नहीं बना सकता, लेकिन मुझे पता है कि आप अपने प्रश्नों को गतिशील बनाने और फिर कॉल करने के लिए अभिव्यक्ति पेड़ का उपयोग कर सकते हैं .कंपली (कोड में) इसे चलाने योग्य

दरअसल, अभिव्यक्ति पेड़ के साथ बिल्डिंग डायनामिक क्वेरी बेहतर लिंक है। यह आपको बिल्कुल वही देनी चाहिए जो आप चाहते हैं, और यह क्या है के लिए काफी संक्षिप्त है। यह आपके लिए एक अच्छा उदाहरण के रूप में कार्य करना चाहिए 🙂

मुझे लगता है कि आप अपने XML की सामग्री के आधार पर, वैकल्पिक फ़िल्टर शुरू करना चाहते हैं। स्ट्रिपलिंगवायरर द्वारा उदाहरण पर जारी रखने के लिए:

 var name = GetNameFromXml(); var city = GetCityFromXml(); var state = GetStateFromXml(); var result = someObj; if (name != null) result = result.Where(i => i.Name == name); if (city != null) result = result.Where(i => i.City == city); if (state != null) result = result.Where(i => i.State == state); 

इस तरह, आप अपने XML में वास्तव में निर्दिष्ट किए गए के आधार पर, किसी भी संख्या में फिल्टर (कोई भी तीन से नहीं) लागू करेंगे।

हां, यह वास्तव में बहुत आसान है:

 var name = GetBobNameFromXml(); var result = someObj.Where(i => i.Name == name); 

आप यह भी चुन सकते हैं कि मापदंड के टुकड़े टुकड़े को लागू करने के लिए या नहीं।

 var result = someObj; var name = xmlCriteria.Name; if(!string.IsNullOrEmpty(name)) { result = result.Where(i => i.Name == name); } // follow the same pattern for city, state, etc. 

आप यहां तक ​​कि एक पैटर्न का उपयोग कर सकते हैं, जो कथित तौर पर मानदंडों के नाम के शब्दकोश का उपयोग करता है, if कथनों के बंटवारे से बचने के लिए।

 foreach(var criterionPair in xmlCriteria) { var value = criterionPair.Value; result = result.Where(i => propGetters[criterionPair.PropertyName](i, value)); } 

असल में, आप इन पंक्तियों के साथ बहुत कुछ कर सकते हैं यदि आप अपनी स्थिति के अनुसार विशेष रूप से एक जवाब चाहते हैं, तो आपको एक अधिक विशिष्ट प्रश्न प्रदान करने की आवश्यकता होगी।