使用LINQ,选择另一个对象列表中的对象列表

时间:2010-10-14 15:01:15

标签: c# linq select linq-to-objects

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).Distinct();

我想要ClassA中所有classBList个对象的明确列表。如何使用 LINQ 解决此问题?我正在考虑嵌套查询,但无法弄明白。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:85)

您正在尝试为原始列表中的每个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();

答案 1 :(得分:14)

您希望使用IEnumerable.SelectMany()扩展方法来展平层次结构:

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