2010-10-14 47 views
32
public class ClassA 
{ 
    public string MyString {get; set;} 
} 

public class ClassB 
{ 
    public List<ClassA> MyObjects {get; set;} 
} 

List<ClassB> classBList = new List<ClassB>(); 
var results = (from i in classBList select i.MyObjects).ToDistinct(); 

Tôi muốn có một danh sách riêng biệt về tất cả các đối tượng ClassA trong lớp học. Làm thế nào để tôi sử dụng LINQ? Tôi đang suy nghĩ một truy vấn lồng nhau nhưng không thể tìm ra nó. Bất kỳ trợ giúp là rất đánh giá cao.Sử dụng LINQ, chọn danh sách các đối tượng bên trong một danh sách đối tượng khác

Trả lời

69

Bạn đang cố gắng chọn nhiều đối tượng kết quả cho từng đối tượng ClassB trong danh sách gốc.

Vì vậy, bạn đang tìm kiếm SelectMany extension method:

var results = classBList.SelectMany(b => b.MyObjects).Distinct(); 

Nếu bạn muốn sử dụng biểu thức truy vấn, bạn sẽ cần phải sử dụng two from clauses:

var results = (from b in classBList from a in b.MyObjects select a).Distinct(); 
+0

hoàn hảo, cảm ơn bạn! – Tom

+0

Cú pháp truy vấn bạn cung cấp có sử dụng SelectMany khi dịch không? Tôi rất ngây thơ khi nói đến cú pháp truy vấn vì nó luôn luôn trông chi tiết hơn (ngoại trừ trong các tình huống tham gia). –

+0

@Justin: Có; hai biểu thức đó phải biên dịch giống nhau. – SLaks

11

Bạn muốn sử dụng IEnumerable.SelectMany() mở rộng Phương pháp để làm phẳng phân cấp:

var result = classBList.SelectMany(b => b.MyObjects).Distinct(); 
Các vấn đề liên quan