【问题标题】:Using LINQ, select list of objects inside another list of objects使用 LINQ,在另一个对象列表中选择对象列表
【发布时间】:2011-04-25 11:26:21
【问题描述】:
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();

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您提供的查询语法是否在翻译后使用 SelectMany?在查询语法方面我有点天真,因为它总是看起来更冗长(除了在连接情况下)。
      • @贾斯汀:是的;这两个表达式应该编译相同。