2010-07-20 14 views
10

आज थोड़ा संघर्ष कर रहा है।यदि एक लिंक के भीतर बयान जहां क्लॉज

मेरे पास निम्न विधि है जो उत्पादों की एक सूची लौटाती है।

public static List<tblWeight> GetProductInfo(string memberid, string locationid, string basematerial, string source) 
     { 
      MyEntities getproductinfo = new MyEntities(); 

      return (from p in getproductinfo .tblWeights 
         where p.MemberId == memberid && 
           p.LocationId == locationid && 
           p.BaseMaterialName == basematerial && 
           p.WeightStatus == source 
         select p) 
         .ToList(); 
  • कहाँ basematerial & स्रोत सूचियों ड्रॉप डाउन कर रहे हैं।

मैं कहां से कुछ आईएफ विवरणों को शामिल करने के बारे में कैसे जा सकता हूं?

उदाहरण के लिए, यदि बेसमटेरियल डीडीएल छुआ नहीं गया है लेकिन स्रोत डीडीएल में कोई आइटम चुना गया है, तो परिणाम बेसमटेरियल से जुड़े सब कुछ वापस कर देगा लेकिन चयनित स्रोत द्वारा फ़िल्टर किया जाएगा।

क्या यह भी समझ में आता है ?!

मुझे यह भी यकीन नहीं है कि मैं सही दृष्टिकोण ले रहा हूं - कृपया मेरी अज्ञानता को क्षमा करें।

+1

क्या आप स्पष्टीकरण दे सकते हैं "यदि बेसमटेरियल डीडीएल छुआ नहीं गया है लेकिन स्रोत डीडीएल में कोई आइटम चुना गया है"? – bits

+0

डीडीएल का अर्थ इस संदर्भ में क्या है? –

+0

क्षमा करें बिट्स - तो यदि कोई उपयोगकर्ता बेसमटेरियल ड्रॉप डाउन सूची से कुछ भी नहीं चुनता है, तो अनिवार्य रूप से डेटा सेट को इस मानदंड से 'फ़िल्टर नहीं किया जाएगा'। –

उत्तर

16

आप की आवश्यकता पर आपकी क्वेरी के लिए उन्हें जोड़ सकते हैं:

var r = (from p in getproductinfo .tblWeights 
         where p.MemberId == memberid && 
           p.LocationId == locationid && 
           p.WeightStatus == source 
         select p) 

if (!String.IsNullOrEmpty(basematrial)) 
    r = r.Where(p => p.BaseMaterialName == basematerial); 

return r.ToList(); 
+0

हैलो मोई - इस समाधान के लिए आपको बहुत बहुत धन्यवाद, इससे मुझे बहुत मदद मिली है और इसे लागू करना आसान है। –

10

इन विस्तार WhereIf नामित तरीकों को लागू करने पर विचार करें।

आप इसे दो पैरामीटर पास करते हैं: बूलियन और एक लैम्ब्डा फ़ंक्शन का मूल्यांकन किया गया एक बयान। यदि बूल स्टेटमेंट सही साबित होता है, तो लैम्ब्डा जोड़ा जाता है। IEnumerable और IQueryable दोनों के लिए

return getproductinfo.tblWeights 
      .Where(w=> w.MemberId == memberid && 
        w.LocationId == locationid) 
      .WhereIf(!string.IsNullOrEmpty(basematerial), w=>w.BaseMaterialName == basematerial) 
      .WhereIf(!string.IsNullOrEmpty(source), w=>w.WeightStatus == source)       
      .ToList(); 

यहाँ वे कर रहे हैं,:

WhereIf on ExtensionMethod.net

आपकी क्वेरी की तरह लग सकता है। यह आपको LINQ से SQL, इकाई फ्रेमवर्क, सूचियों, Arrays, और उन 2 इंटरफेस लागू करने वाले किसी अन्य चीज में .WhereIf() का उपयोग करने की अनुमति देता है।

public static IEnumerable<TSource> WhereIf<TSource>(this IEnumerable<TSource> source, bool condition, Func<TSource, bool> predicate) 
{ 
    if (condition) 
     return source.Where(predicate); 
    else 
     return source; 
} 

public static IEnumerable<TSource> WhereIf<TSource>(this IEnumerable<TSource> source, bool condition, Func<TSource, int, bool> predicate) 
{ 
    if (condition) 
     return source.Where(predicate); 
    else 
     return source; 
} 

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

public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Func<TSource, int, bool> predicate) 
{ 
    if (condition) 
     return source.Where(predicate); 
    else 
     return source; 
} 
+0

हे वहाँ पी .. कैंपबेल - आपके इनपुट के लिए धन्यवाद, इसने मुझे विचार के लिए बहुत सारे भोजन दिए हैं। हालांकि, मैंने मोई के समाधान को लागू किया ताकि जवाब के रूप में चिह्नित किया जा सके। हालांकि, मुझे यकीन है कि मैं किसी भी समय आपके समाधान का उपयोग करूंगा, इसलिए मैं जितना कर सकता हूं उतना जवाब दूंगा। –

+2

IQueryable के लिए मुझे जोड़ना था। वापसी के लिए .Query() वापसी: 'वापसी स्रोत। जहां (predicate) .Query();' –