2010-10-19 13 views
9

तो मैं एक मॉडल CTP4 कोड पहले सुविधाओं का उपयोग कर इकाई की रूपरेखा 4 में बनाया है। यह सब एक साथ अच्छी तरह से काम कर रहा है।इकाई की रूपरेखा संहिता प्रथम और खोज मानदंड

मैं अपने आवेदन के लिए एक उन्नत खोज सुविधा जोड़ने का प्रयास कर रहा हूँ। यह "उन्नत खोज" सुविधा बस उपयोगकर्ताओं को खोजने के लिए कई मानदंड दर्ज करने की अनुमति देती है। उदाहरण के लिए:

उन्नत उत्पाद खोज

  • नाम
  • प्रारंभ दिनांक
  • समाप्ति तिथि

यह उत्पाद नाम से खोज करने के लिए और भी सीमित कर उपयोगकर्ता की अनुमति होगी उन तारीखों के परिणाम जो वे बनाए गए थे।

समस्या यह है कि मैं कैसे इन क्षेत्रों के कई किसी एक खोज में इस्तेमाल किया जाएगा पता नहीं है है। तो मेरी इकाई फ्रेमवर्क क्वेरी का निर्माण कैसे किया जा सकता है?

मेरे पास an example है जो एंटीटी फ्रेमवर्क के लिए गतिशील क्वेरी बनाने का वर्णन करता है, हालांकि यह कोड प्रथम दृढ़ता के लिए बनाए गए पॉको कक्षाओं के लिए काम नहीं करता है।

एक प्रश्न के निर्माण के लिए जब की कमी की संख्या अज्ञात है के लिए सबसे अच्छा तरीका क्या है?

उत्तर

20

तो इस समस्या (और हमारे दोस्त गूगल से कुछ मदद की) पर काम के कुछ घंटे के बाद मैं अपनी समस्या को समस्या का समाधान मिल गया है।

using System; 
using System.Linq; 
using System.Linq.Expressions; 

namespace MyCompany.MyApplication 
{ 
    public static class LinqExtensions 
    { 
     public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Expression<Func<TSource, bool>> predicate) 
     { 
      if (condition) 
       return source.Where(predicate); 
      else 
       return source; 
     } 
    } 
} 

इस विस्तार के एक LINQ क्वेरी के लिए अनुमति देता है इस तरह बनाया जाना:

var products = context.Products.WhereIf(!String.IsNullOrEmpty(name), p => p.Name == name) 
           .WhereIf(startDate != null, p => p.CreatedDate >= startDate) 
           .WhereIf(endDate != null, p => p.CreatedDate <= endDate); 

यह प्रत्येक WhereIf बयान केवल परिणामों को प्रभावित करने की अनुमति देता है कि यह प्रदान की को पूरा करती है कि अगर मैं निम्नलिखित Linq अभिव्यक्ति एक्सटेंशन बनाया शर्त। समाधान काम करता प्रतीत होता है, लेकिन मैं हमेशा नए विचारों और/या रचनात्मक आलोचना के लिए खुला रहता हूं।

+0

शानदार! धन्यवाद! –

+0

+1 कोड का बहुत उपयोगी थोड़ा सा। –

+0

हम इन-बिल का उपयोग कर सकते हैं जहां()। कहां() लेकिन किसी को आपके एक्सटेंशन का उपयोग क्यों करना चाहिए? वहां इतना खास क्या है? –

0

जॉन,

आपका समाधान पूरी तरह से अद्भुत है! लेकिन, साझा करने के लिए, मैं इस विधि का उपयोग तब तक कर रहा हूं जब तक कि मैं आपकी विचारधारा नहीं देखता।

var items = context.Items.Where(t => t.Title.Contains(keyword) && !String.IsNullOrEmpty(keyword)); 

इसलिए, यह इस लिए सबसे अच्छा समाधान होने के लिए नहीं लगता है, लेकिन यकीन है कि के लिए इसके चारों ओर एक रास्ता है।

संबंधित मुद्दे