2011-09-20 55 views
7

Tôi có danh sách lớp A, lớp A chứa danh sách lớp B. Tôi muốn hoạt động trên tất cả các phiên bản B trong tất cả các phiên bản của lớp A.LINQ - hoạt động trên danh sách các danh sách

var myListOfA = new List<A>(); 

class A 
{ 
    public List<B> ListOfB; 
} 

Làm thế nào tôi có thể lặp qua tất cả B ví dụ foreach(var b in myListOfA.ListOfB){}?

Trả lời

9

Bạn có thể sử dụng SelectMany:

foreach(var b in myListOfA.SelectMany(a => a.ListofB)) 

Nhìn thấy nó trong hành động ở ideone.com.

+1

Ahh, tôi đã thử 'Select' không hoạt động (có vẻ hiển nhiên bây giờ), ngay lập tức. Cảm ơn. – Chris

2

một cách khác mà hoạt động tốt cho làm thế nào tôi nghĩ về đối tượng lồng nhau là:

(from A objA in myListOfA 
    from B objB in objA.ListOfB 
     select objB); 

này sẽ "quạt ra" danh sách của b trong tất cả các của một trong danh sách chính.

+0

Lưu ý rằng đây là cú pháp đường cho 'SelectMany', nhưng tôi đồng ý, đôi khi nó dễ đọc hơn. – Jens

+0

vâng nó chắc chắn chỉ là một cách khác để sử dụng selectmany, chỉ muốn nó ở đây cho mục đích tham khảo –

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