आप गतिशील विनिर्देश और गतिशील उपयोग कर सकते हैं आदेश। मैंने उनके बारे में here और here ब्लॉग किया है। उदाहरण के नीचे की मदद करनी चाहिए हैं-
//Assume you're getting following values from search form.
string userSuppliedProperty = "AverageRating";
OperationType userSuppliedOperationType = OperationType.GreaterThan;
var userSuppliedValue = 4.5;
//Create DynamicSpecification from these properties and pass it to repository.
var userFilter = new DynamicSpecification<Product>(userSuppliedProperty, userSuppliedOperationType, userSuppliedValue);
var filteredProducts = _repository.Get(userFilter);
//You can also combine two specifications using either And or Or operation
string userSuppliedProperty2 = "Category";
OperationType userSuppliedOperationType2 = OperationType.EqualTo;
var userSuppliedValue2 = "Keyboard";
var userFilter2 = new DynamicSpecification<Product>(userSuppliedProperty2, userSuppliedOperationType2, userSuppliedValue2);
var combinedFilter = userFilter.And(userFilter2);
var filteredProducts2 = _repository.Get(combinedFilter);
//and it support dynamic sorting
string userSuppliedOrderingProperty = "Category";
OrderType userSuppliedOrderType = OrderType.Ascending;
var sortedFilteredProducts = _repository.Get(combinedFilter, o => o.InOrderOf(userSuppliedOrderingProperty, userSuppliedOrderType));
मैं खोज वस्तु/डीटीओ आप हो रही है के बारे में पता नहीं है, लेकिन आप आसानी से एक सामान्य खोज वस्तु/डीटीओ बना सकते हैं और कुछ पंक्तियों में GenericSpecification की वस्तुओं की श्रृंखला के लिए यह मैप कर सकते हैं कोड का मैंने इसे डब्लूसीएफ सेवा के आसपास अतीत में इस्तेमाल किया है और उसने मेरे लिए बहुत अच्छा काम किया है।
स्रोत
2015-08-26 16:30:05
धन्यवाद, लेकिन यह काम कैसे करता है? क्या यह डेटाबेस से सभी डेटा खींचता है और फिर चरण-दर-चरण इसे डेटा के वांछित सेट तक सीमित करता है ?? – Eduard
@ टी-एडीडी: नहीं, यह 'स्थगित निष्पादन' (http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx) का लाभ उठाता है। इसका मतलब है कि 'IQueryable' जो ऊपर दिए गए उदाहरण में बना है, केवल एक क्वेरी अभिव्यक्ति है जो वर्णन करती है कि डेटा फ़िल्टर कैसे किया जाता है। क्वेरी का असली निष्पादन बिल्कुल उदाहरण में नहीं है। उदाहरण के लिए 'query.oList() 'उदाहरण के लिए,' IQueryable 'पर" लालची "ऑपरेटर को लागू करके आप क्वेरी निष्पादित करते हैं। इस बिंदु पर - और पहले नहीं - क्वेरी अभिव्यक्ति का अनुवाद SQL में किया गया है और सर्वर पर भेजा गया है। –
Slauma
यह अच्छा नहीं है क्योंकि यह मानता है कि 'कुछ एंटीटीटी' में नाम और मात्रा फ़ील्ड हैं, इसलिए यह केवल आधा गतिशील है। –