2012-07-19 14 views
6

मैं इस कोड को एक linq समाधान में कनवर्ट करना चाहता हूं। यह ग्राहकों के संग्रह में क्या दिखता है और देखें कि कम से कम एक का मध्य नाम है या नहीं। इस कोड को ठीक काम करता है, मैं सिर्फ इतना वैकल्पिक समाधान .:संग्रह में पहला मैच

//Customers - List<Customer> 
private bool checkMiddleName() 
{ 
    foreach (Customer i in Customers) 
    { 
     if (i.HasMiddleName == true) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

मैं की तरह कुछ लिखने का प्रयास किया की तलाश में LINQ जानने की कोशिश कर रहा हूँ,: (Customers.Foreach(x=>x.HasMiddleName==true)... लेकिन लाइन लग रहा है यह विधि मैं तलाश कर रहा हूँ नहीं है ।

+0

FYI करें - सूची foreach विधि सिर्फ दिए गए समारोह सूची – cordialgerm

उत्तर

18

तुम सिर्फ अगर थेरेस कम से कम एक में, आप Enumerable.Any उपयोग कर सकते हैं जानना चाहते हैं हैं:

bool atLeastOneCustomerWithMiddleName = Customers.Any(c => c.HasMiddleName); 

यदि आप पहले मिलान करने वाले cus को जानना चाहते हैं कोई मिलान नहीं करता है, तो

var customer = Customers.FirstOrDefault(c => c.HasMiddleName); 
if(customer != null) 
{ 
    // there is at least one customer with HasMiddleName == true 
} 

First एक InvalidOperationException फेंकता है तो स्रोत अनुक्रम खाली है, FirstOrDefault रिटर्न null जबकि: टोमेर ऑर्र, आप MiddleName==true साथ पहले ग्राहक को खोजने के लिए Enumerable.First या Enumerable.FirstOrDefault उपयोग कर सकते हैं।

+0

क्वेरी से सच या गलत लौटने का कोई तरीका? – user194076

+0

@ user194076: यदि आप यह जांचना चाहते हैं कि लीट एक मेल खाने वाले ग्राहक पर है तो आप 'Any' का उपयोग कर सकते हैं। मेरा जवाब संपादित किया। –

1

इस के आधार पर:

क्या यह करता है यह ग्राहकों के एक संग्रह में लग रहा है और देखें कि कम से कम एक एक मध्य नाम है।

प्रयास करें

return Customers.Where(x => x.HasMiddleName).Any(); 

इस क्वेरी वापसी true यदि कम से कम एक custmer संपत्ति HasMiddleName = true

+1

नाइस के प्रत्येक सदस्य पर निष्पादित - कोई मैं के लिए क्या देख रहा था। धन्यवाद! – user194076

+6

'कोई भी' एक अनुमान लगाता है, इसलिए आप इसे ग्राहकों को वापस करने के लिए छोटा कर सकते हैं। किसी भी (x => x.HasMiddleName); ' –

2
var result = Customers.Where(x=>x.HasMiddleName == true).FirstOrDefault(); 
0

आप प्राप्त करने के लिए आपको क्या चाहिए निम्न का उपयोग कर सकते हैं:

Customers.Where(cust=> cust.HasMiddleName).Count > 0 

तो, अगर गणना शून्य से भी अधिक है कि आप कौन मध्य नाम है कुछ ग्राहकों का मतलब है।

या बेहतर प्रदर्शन के लिए आप कहते हैं कि हो सकता है:

bool customerWithMiddleName; 

foreach(Customer cust in Customers) 
{ 
    if(cust.HasMiddleName) 
    { 
    customerWithMiddleName = true; 
    break; 
    } 
} 
+1

यह एक अच्छा विचार नहीं है क्योंकि यह पूरी क्वेरी निष्पादित करता है, केवल यह जानने के लिए कि कोई मिलान तत्व है या नहीं। इस बात पर विचार करें कि ग्राहकों में 1000000 ग्राहक हैं और पहले में मिडलनाम है। 'कोई भी (cust => cust.HasMiddleName) 'तुरंत' सत्य 'वापस कर देगा, जबकि आपका दृष्टिकोण प्रत्येक तत्व को लौटने से पहले जांच करेगा। –

+2

इस कोड को यह जानने की आवश्यकता है कि एक मैच मिलने पर पहली बार शॉर्ट सर्किट करने के बजाए कितने सही आइटम हैं। यह अनावश्यक रूप से महंगा हो सकता है। उपयोग करने के लिए बेहतर। कोई()। – StriplingWarrior

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