2009-12-01 18 views
6

मैं निम्नलिखित कोड (संदर्भ नीचे के रूप में संकुचित सवाल गुंजाइश सीमित रखने के लिए)इस foreach उपज एक linq उपज के लिए लिखना?

public static IEnumerable<Color> GetThemColors(){ 
    var ids = GetThePrimaryIds(); 
    foreach (int id in ids){ 
     yield return GetColorById(id); 
    } 
    ids = GetTheOtherIds(); 
    foreach (int id in ids){ 
     yield return GetOtherColorsById(id); 
    } 
} 

मैं उन्हें (कुछ इस तरह जो बंद पाठ्यक्रम संकलन नहीं है करने के लिए फिर से लिखने के लिए करना चाहते है कहो

public static IEnumerable<Color> GetThemColors(){ 
    GetThePrimaryIds().Select(id=>yield return GetColorById(id)); 
    GetTheOtherIds().Select(id=>yield return GetOtherColorsById(id));  
} 

प्रमुख मुद्दा जा रहा है कि मैं दो foreach उपज प्रगणक है मेरा पहला टुकड़ा में है, जो मैं अपने आलसी लोडिंग सुविधाओं खो बिना LINQ में करने के लिए पता नहीं कैसे

उत्तर

15

आप Concat हैं:

return GetThePrimaryIds().Select(id => GetColorById(id)).Concat(
    GetTheOtherIds().Select(id => GetOtherColorsById(id))); 

यह भी ध्यान रखें कि आपको yield return लैम्बडास की आवश्यकता नहीं है।

+0

धन्यवाद, यह नहीं पता था कि कॉन्सैट आलसी –

+1

था, जहां तक ​​मुझे संख्यात्मक पर सभी विधियों को पता है जो एक आईनेमरेबल लौटाते हैं आलसी हैं। – Joren

+0

सच है, लेकिन मुझे लगता है कि कुछ कारणों से Concat एक IList –

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