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

Tom*_*Tom 40 c# linq linq-to-objects select

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();
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 88

您正在尝试为ClassB原始列表中的每个对象选择多个结果对象.

因此,您正在寻找SelectMany扩展方法:

var results = classBList.SelectMany(b => b.MyObjects).Distinct();
Run Code Online (Sandbox Code Playgroud)

如果要使用查询表达式,则需要使用两个from子句:

var results = (from b in classBList from a in b.MyObjects select a).Distinct();
Run Code Online (Sandbox Code Playgroud)


Jus*_*ner 16

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

var result = classBList.SelectMany(b => b.MyObjects).Distinct();
Run Code Online (Sandbox Code Playgroud)