首页 > 解决方案 > 使用 LINQ 编译唯一对象列表

问题描述

有伪代码

class Bar {int BarId;}

class Foo {
  List<Bar> Bars;
}

使用 Linq,我应该如何从 foo 列表中选择所有可用的唯一条?

List<Foo> foos = GetFoos(); // anything

List<Bar> allBars = foos.Select(f=>f.Bars)...?

标签: c#.netlinq.net-4.5

解决方案


您可以使用SelectMany()如下 Linq 方法:

List<Bar> allBars = foos.SelectMany(f => f.Bars).ToList();

如果您在列表中需要不同的 Bar 实例,请添加Distinct()如下:

List<Bar> allBars = foos.SelectMany(f => f.Bars).Distinct().ToList();

来源微软文档

如果要从某些自定义数据类型的对象序列中返回不同的元素,则必须在类中实现 IEquatable 通用接口。


推荐阅读