में चेनिंग या शर्तें मैं इस समस्या का समाधान करने के लिए सक्रिय रूप से खोज कर रहा हूं, लेकिन मुझे लगता है कि अगर मैं स्टैक पर किसी ने इसे पहले ही समझ लिया है तो मैं कुछ शोध और विकास का समय कम कर सकता हूं। (मुझे ऑनलाइन कुछ भी नहीं मिला है इसलिएईएफ 5.0
हमारे पास एक ऐसे अनुप्रयोग ढांचे में एक मामला है जहां हम निर्माण कर रहे हैं जहां हमें भविष्यवाणियों (List<Expression<Func<T,bool>>>
) के सेट में लेने की क्षमता की आवश्यकता है और इसे एक खोज ढांचे में पार्स करें।
अभी हम इस तरह से किया जा रहा है कि में फिल्टर करने के लिए क्षमता है:
//Assume predicates is passed as a method argument.
// of List<Expression<Func<T,bool>>>
//Assume user is passed in as a method argument.
//Assume FilterToUserAccess is a custom extension method that restricts the dataset
// to access restrictions.
var query = _dbContext.Set<EntityType>()
.FilterToUserAccess(user);
foreach(var p in predicates){
query = query.Where(p);
}
return p.ToList();
कारण है कि हम इस फ़िल्टर वस्तुओं के पैमाने-क्षमता के लिए है की ज़रूरत है। हालांकि त्वरित खोज के लिए ईएफ की अंतर्निहित क्षमताओं को देखते हुए यह संभव नहीं है। मुझे क्या करने में सक्षम होना चाहिए:
ऑब्जेक्ट ए (आइए रेस कार दिखाएं) और हम त्वरित खोज बॉक्स में मेक, मॉडल, टीम और ड्राइवर खोजना चाहते हैं। इसलिए यदि मैं "एर्नहार्ट" दर्ज करता हूं, तो यह सभी रेस कार इकाई गुणों को बनाने, मॉडल, टीम और ड्राइवर की खोज करेगा। मैं सभी डीईआई कारों के साथ-साथ डेल जूनियर के साथ समाप्त हो जाऊंगा। मैं एक ही दृष्टिकोण का उपयोग करना चाहता हूं ताकि हम एक खोज योग्य इकाई को कॉन्फ़िगर कर सकें और एप्लिकेशन प्रारंभ पर खोज कॉन्फ़िगरेशन को प्रतिबिंबित कर सकें।
//Assume predicates is passed as a method argument.
// of List<Expression<Func<T,bool>>>
//Assume user is passed in as a method argument.
//Assume FilterToUserAccess is a custom extension method that restricts the dataset
// to access restrictions.
var query = _dbContext.Set<EntityType>()
.FilterToUserAccess(user);
foreach(var p in predicates){
query = query.Or(p);
}
return p.ToList();
मुझे पता है मैं क्या कर सकते हैं:
_dbContext.Set<EntityType>().Where(predicate1 || predicate2 || predicate3)
हालांकि इस दृष्टिकोण हम करने के लिए ले जाना चाहते हैं के लिए काम नहीं करेगा मैं आदर्श बनाने के लिए क्वेरी होने के किसी तरह से कुछ ऐसा दिखाई चाहते हैं इस समस्या का समाधान निकले। आदर्श रूप से हमारी क्लाइंट साइट्स में से एक के लिए एक व्यवस्थापक एक अतिरिक्त खोज शब्द में जा सकता है और उस इकाई प्रकार के लिए सभी त्वरित खोजों में शामिल होने के लिए एक क्लिक के साथ कॉन्फ़िगर कर सकता है जैसे कि हम वर्तमान में फ़िल्टर के साथ खींच सकते हैं जो मानक का उपयोग करते हैं .Where(...)
"और" चेनिंग तर्क।
आपको गतिशील रूप से एक अभिव्यक्ति वृक्ष बनाने की आवश्यकता होगी। –
इसके लिए कोई भी संभावित प्रारंभिक स्थान? मैं एक अभिव्यक्ति वृक्ष उत्पन्न हाथ की मूल बातें जानता हूं लेकिन मुझे डर है कि यह खरगोश छेद वास्तव में बहुत गहरा हो जाता है। किसी भी संदर्भ की सराहना की जाएगी। – VulgarBinary
आप लिंककिट/अभिव्यक्ति बिल्डर को देख सकते हैं। ईबी ईएफ के लिए काम करता है और श्रृंखला 'या' शर्तों के लिए यह बहुत आसान बनाता है। –