2010-10-14 111 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(); 

我想要一個清單,列出classlass中的所有ClassA對象。我如何使用linq去解決這個問題?我在想一個嵌套的查詢,但無法弄清楚。任何幫助非常感謝。使用LINQ,選擇另一個對象列表中的對象列表

回答

69

您試圖爲原始列表中的每個ClassB對象選擇多個結果對象。

因此,你要尋找的SelectMany extension method

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

如果你想使用查詢表達式,你需要使用two from clauses

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

完美,謝謝! – Tom 2010-10-14 15:06:24

+0

您提供的查詢語法是否使用SelectMany一次翻譯?因爲它總是看起來更加冗長(除了在連接情況下),所以對於查詢語法我真是太天真了。 – 2010-10-14 15:09:12

+0

@Justin:是的;這兩個表達式應該相同地編譯。 – SLaks 2010-10-14 15:40:58

11

你想用IEnumerable.SelectMany()擴展方法扁平化層次結構:

var result = classBList.SelectMany(b => b.MyObjects).Distinct(); 
相關問題