使用 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,在另一个对象列表中选择对象列表的主要内容,如果未能解决你的问题,请参考以下文章