2013-01-22 18 views
6

के लिए ऑब्जेक्ट क्वेरी के लिए एक linq की आवश्यकता है मैं चार संग्रहों में से एक संग्रह से पाठ का चयन करने की कोशिश कर रहा हूं।नेस्टेड संग्रह

RootObject एक List<ResourceSet>resourceSets

resourceSets एक List<Resources>resources

resources एक List<RouteLeg>routeLegs

routLegs एक List<ItineraryItem>itineraryItems

है है है है प्रत्येक routeLeg में ItineraryItem नामक वस्तु और वस्तु शामिल है और उस ऑब्जेक्ट में एक टेक्स्ट प्रॉपर्टी है।

मैं routeLeg ऑब्जेक्ट पर सभी टेक्स्ट गुणों की एक सूची खींचने की कोशिश कर रहा हूं। जैसा कि आप देख सकते हैं कि यह बहुत गहरा घोंसला है। मैं स्पष्ट रूप से नेस्टेड लूप में ऐसा कर सकता हूं .. (जैसा कि नीचे दिखाया गया है) लेकिन लिंक से ऑब्जेक्ट्स का उपयोग करके कुछ क्लीनर चाहिए लेकिन मुझे कई घोंसले में परेशानी हो रही है।

ResourceSet testst = new ResourceSet(); 
      ResourceSet rs;   
      StringBuilder sb = new StringBuilder(); 

      for (int i = 0; i < _Result.resourceSets.Count; i++) 
      { 
       rs = _Result.resourceSets[i]; 


       for (int j = 0; j < rs.resources.Count; i++) 
       { 

        Resource rec = rs.resources[j]; 

        string test = rec.distanceUnit; 

        for (int k = 0; k < rec.routeLegs.Count; k++) 
        { 
         RouteLeg rl = rec.routeLegs[k]; 

         for (int l = 0; l < rl.itineraryItems.Count; l++) 
         { 
          ItineraryItem ii = rl.itineraryItems[l];       
          sb.Append(ii.instruction.ToString()); 
         } 
        } 

       } 
      } 
+0

आपको एक बग है ... 'के लिए (इंट जे = 0; j

उत्तर

13

आप SelectMany उपयोग कर सकते हैं आंतरिक आइटम लाने में:

var items = result.resourceSets 
        .SelectMany(rs => rs.resources) 
        .SelectMany(res => res.routeLegs) 
        .SelectMany(rl => rl.itineraryItems) 
foreach(var x in items) 
    sb.Append(x.instruction.ToString()); 
+0

बहुत बढ़िया ... धन्यवाद रीड .. मेरा लिंक जंगली है :) –

+0

अंतिम पंक्ति एसबी होना चाहिए .Append (item.instruction.ToString()); ? – pgee70

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