2010-10-14 118 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(); 
相关问题