2010-02-17 20 views
26

मैं कहाँ का उपयोग कर कोड की एक पंक्ति है में एक से अधिक शर्त का उपयोग? तो मैं x => predicate && y => predicate कह सकता हूँ?LINQ का जहां विधि

धन्यवाद

+1

की तरह दोनों डाल सकता है x और y विभिन्न प्रकार है? –

उत्तर

60

यदि आप चाहें तो एक भी विधेय में अपने अलग स्थितियों रोल कर सकते हैं:

codebase.Methods.Where(x => (x.Body.Scopes.Count > 5) && (x.Foo == "test")); 

या आप एक अलग उपयोग कर सकते हैं Where प्रत्येक शर्त के लिए कॉल करें:

codebase.Methods.Where(x => x.Body.Scopes.Count > 5) 
       .Where(x => x.Foo == "test"); 
+1

अधिक जानकारी के साथ बड़े खंडों को ध्यान में रखते हुए, क्या दोनों मामलों में समान जटिलता है या क्या पहला धीमा है? – dwbrito

+3

@alaxid: मैं उम्मीद करता हूं कि दूसरा दूसरा * थोड़ा * धीमा हो, क्योंकि प्रत्येक 'कहां' कॉल एक छोटे से अतिरिक्त ओवरहेड (विधि कॉल, प्रतिनिधि आमंत्रण इत्यादि) में शामिल होता है। मैं इसके बारे में किसी भी सामान्य दिन-प्रति-दिन परिदृश्य में चिंतित नहीं होगा। – LukeH

+0

मैं खोज रहा था। कोई(), जाहिर है यह काम किया। धन्यवाद ! –

0

इस तरह ..

codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.Scopes.Count < 10); 
1

"y" क्या दर्शाता है?

आप केवल मानक & & स्थिति का उपयोग कर सकते हैं। एक "Y" के लिए कोई ज़रूरत नहीं:

codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.SomethingElse < 14); 
2

अपने उदाहरण में, जहां y से आता है? Where विधि एक इनपुट पैरामीटर के साथ एक लैम्ब्डा लेता है, जो आपके द्वारा संचालित अनुक्रम के एक उदाहरण का प्रतिनिधित्व करता है।

आप कर सकते हैं, ज़ाहिर है, ऐसी अनेक शर्तों x के खिलाफ है:

Where(x => x.Foo > 5 && x.Bar < 3) 
1

मुझे यह नहीं मिला। आप क्या नहीं कर सकते

codebase.Methods.Where(x => x.Head.IsHairy && x.Body != null && x.Body.Scopes.Count > 5); 
+0

के रूप में कार्य करेगा y जो आपको रहस्यमय कर रहा है वह फ़िल्टर में प्रतिद्वंद्वी होने के लिए ऑब्जेक्ट के लिए स्टैंड-इन है। इसे "बेनामी प्रतिनिधि" कहा जा सकता है लेकिन मुझे यकीन नहीं है। किसी भी मामले में, यह आपके लिए लैम्ब्डा अभिव्यक्ति में आपके प्रकार के गुणों तक पहुंचने के लिए उपयोग करने के लिए एक चर प्रदान करता है। आप किसी भी कानूनी चर नाम का उपयोग कर सकते हैं। –

5

कोई आप एक ही जहां में 2 प्रतिनिधियों को परिभाषित नहीं कर सकते हैं, लेकिन आप एक दूसरे के बाद का निर्माण या एक ही शर्त पर इस

var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.Scopes.name == ""); 

or 

var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5) 
     .where(y=> y.Body.Scopes.name == ''); 

or 

var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5 ) 
.Union(codebase.Methods.Where(y => y.Body.Scopes.name == '' )); 
0
codebase.Methods.Where(x => x.Body.Scopes.Count > 5).Where(x => x.Body.Scopes.TypeName == "Scopes").Where(x => x.Body.Scopes.Level == LEVEL_HIGH); 
संबंधित मुद्दे