2013-01-22 32 views
6

Tôi đang cố gắng chọn văn bản từ bộ sưu tập có độ sâu ba phần tư.Cần một LINQ để truy vấn đối tượng cho bộ sưu tập lồng nhau

RootObjectList<ResourceSet>resourceSets

Các resourceSetsList<Resources>resources

Các resourcesList<RouteLeg>routeLegs

Các routLegsList<ItineraryItem>itineraryItems

Các mỗi routeLeg chứa và đối tượng được gọi là ItineraryItem và trong đối tượng đó có thuộc tính văn bản.

Tôi đang cố gắng lấy ra danh sách tất cả các thuộc tính văn bản trên đối tượng routeLeg. Như bạn có thể thấy nó được lồng khá sâu. Tôi rõ ràng có thể làm điều này trong vòng lặp lồng nhau .. (như hình dưới đây) nhưng muốn một cái gì đó sạch hơn bằng cách sử dụng LINQ to Objects nhưng tôi đang gặp rắc rối với nhiều làm tổ.

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

Bạn có một lỗi ... 'for (int j = 0; j

Trả lời

13

Bạn có thể sử dụng SelectMany để lấy các mặt hàng nội bộ:

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

Awesome ... cảm ơn Reed .. Linq của tôi là gỉ :) –

+0

nên dòng cuối cùng là sb .Append (item.instruction.ToString()); ? – pgee70

Các vấn đề liên quan