2010-11-17 16 views
6

क्या (LINQ) में एक खंड शामिल करना संभव है, लेकिन केवल तभी "खाली" खाली हो?परिवर्तनीय का उपयोग करें जहां क्लॉज केवल खाली नहीं है? एक गतिशील जहां खंड?

यानी

where c.Code == sCode && p.Code == code 

इस मामले में चर (मानक C#) कोड कहा जाता है ... अगर इसकी नहीं खाली तो जहां महान है .. लेकिन ऊपर अगर अपने खाली तो मैं नहीं करना चाहते हैं उस में शामिल हैं जहां

यानी

where c.Code == sCode 

एसक्यूएल में इस

की तरह अपनी किया 210

उत्तर

10
where c.Code == sCode && (string.IsNullOrEmpty(code) || p.Code == code) 

मानक LINQ के लिए है कि, मैं पता नहीं है अगर यह LINQ लिए काम करता है एसक्यूएल के लिए।

संपादित करें: इस के माध्यम से short circuit evaluation

अगर c.Code == sCode गलत है काम करता है, यह मूल्यांकन कर बंद हो जाता है और झूठे रिटर्न
अन्यथा, अगर string.IsNullOrEmpty(code) सच है, यह मूल्यांकन कर बंद हो जाता है और सच
रिटर्न अन्यथा, लौट p.Code == code

+0

आप मिल गया है है! गलत तरीका aroun ..... ओह प्रतीक्षा करें कि आप इसे बदल दिया। :) – RPM1984

+2

(चुपके संपादन) = डी – Greg

+0

हाहा निंजा शैली, प्यार करना चाहिए कि कैसे "संपादन" तब तक दिखाई नहीं देते जब तक कि 5 मिनट या उसके बाद किसी प्रश्न का उत्तर न दिया जाए। – RPM1984

4

रखो कि एक IQueryable<T> विस्तार विधि में यह वास्तव में सरल रखने के लिए:

public static IQueryable<Code> WithCodeIfNotEmpty(this IQueryable<Code> source, string code) 
{ 
    if (string.IsNullOrEmpty(code)) 
     return source; 
    else 
     return source.Where(x => x.Code == code); 
} 

उपयोग:

var query = something.WithCodeIfNotEmpty("someCode"); 
3

जैसा कि अन्य ने कहा है:

(string.IsNullOrEmpty(code) || p.Code == code) 

btw एसक्यूएल

C.Code = isnull(ltrim(rtrim(@code)), c.Code) 
+0

धन्यवाद प्रीट .. यह समस्या का सामना करने के लिए यह बहुत अच्छा और सरल समाधान है। मैंने खुद एक पोस्ट से पूछा और लोगों ने अभी डीएलआईएनक्यू और एक्सटी विधियों का जवाब दिया .. मैं चाहता हूं कि आपका समाधान .. – lawphotog

0

करने के लिए अनुकूलित किया जा सकता है यदि आप एक सीधा अनुवाद प्रपत्र TSQL है कि आप दिया चाहते हैं तो इस जवाब

where 
    code == "" || 
    (code != "" && 
    c.Code == code) 
संबंधित मुद्दे