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

Posted

技术标签:

【中文标题】使用 LINQ,在另一个对象列表中选择对象列表【英文标题】:Using LINQ, select list of objects inside another list of objects 【发布时间】: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 来解决这个问题?我正在考虑一个嵌套查询,但无法完全弄清楚。非常感谢任何帮助。

【问题讨论】:

【参考方案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?在查询语法方面我有点天真,因为它总是看起来更冗长(除了在连接情况下)。 @贾斯汀:是的;这两个表达式应该编译相同。

以上是关于使用 LINQ,在另一个对象列表中选择对象列表的主要内容,如果未能解决你的问题,请参考以下文章

Linq通过搜索关键字从对象的关系列表中选择对象

Linq:列表列表到长列表

如何使用 LINQ 选择具有最小或最大属性值的对象

如何选择具有最低属性 linq 查询语法的对象

Linq to SQL 选择 DateTime 字段在任何日期范围列表中的行

如何使用 LINQ 从对象列表中获取唯一的属性列表?