C# 使用LINQ编译唯一对象的列表

C# 使用LINQ编译唯一对象的列表,c#,.net,linq,.net-4.5,C#,.net,Linq,.net 4.5,拥有伪代码 class Bar {int BarId;} class Foo { List<Bar> Bars; } 使用Linq,我应该如何从foo列表中选择所有可用的唯一条 List<Foo> foos = GetFoos(); // anything List<Bar> allBars = foos.Select(f=>f.Bars)...? 您可以使用Linq方法,如下所示: List<Bar> allBars = foo

拥有伪代码

class Bar {int BarId;}

class Foo {
  List<Bar> Bars;
}
使用Linq,我应该如何从foo列表中选择所有可用的唯一条

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

List<Bar> allBars = foos.Select(f=>f.Bars)...?
您可以使用Linq方法,如下所示:

List<Bar> allBars = foos.SelectMany(f => f.Bars).ToList();
List<Bar> allBars = foos.SelectMany(f => f.Bars).Distinct().ToList();
资料来源:

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

您可以使用Linq方法,如下所示:

List<Bar> allBars = foos.SelectMany(f => f.Bars).ToList();
List<Bar> allBars = foos.SelectMany(f => f.Bars).Distinct().ToList();
资料来源:

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


distict应该使用比较器吗?我只是想说,distict by BarId,为这个构建接口需要什么?@Serge你不需要定义新的接口,但是Bar类应该实现IEquatable,所有这些。@Serge你可以使用。GroupBybar=>Bar.Id,k,g=>g.FirstOrDefault不需要Distinct。或者,您可以使用DistinctBybar=>bar.Id,distict中的distict应该使用比较器吗?我只是想说,distict by BarId,为这个构建接口需要什么?@Serge您不需要定义新接口,但是bar类应该实现所有这些功能。@Serge您可以使用.GroupBybar=>bar.Id,k,g=>g.FirstOrDefault不是Distinct的代词。或者,您可以从中使用DistinctBybar=>bar.Id