LINQ从列表中的列表中获取唯一项

时间:2012-07-12 08:22:25

标签: c# linq list ienumerable distinct

我的List类型为MyObject,定义如下:

class MyObject {
     public string ListName { get; set; }
     public IEnumerable<OtherObject> ObjectList { get; set;}
}

给定List类型MyObject,使用LINQ我应该使用什么表达式来获取所有不同的OtherObject

我打算做的是循环每个MyObject并从OtherObject属性中获取不同的ObjectList,但之后我需要在列表中获得不同的内容。

请注意:    MyObject[0].Objectlist[0] == 'ItemA'MyObject[1].Objectlist[0] == 'ItemA'它仍然会返回ItemA的单个实例。此代码仅是一种表示形式。顺便说一句,这不是我访问我的对象的方式。

2 个答案:

答案 0 :(得分:10)

您只需使用Set逻辑即可实现此目的。 C#以HashSet

的形式提供了很好的实现
var set = new HashSet<OtherObject>(myObjects.SelectMany(mo => mo.ObjectList));

或者,如果您更喜欢延迟执行,则可以使用LINQ Distinct方法:

var distinct = myObjects.SelectMany(mo => mo.ObjectList).Distinct();

答案 1 :(得分:3)

怎么样:

var l = new List<MyObject>(...);
var unique = l.SelectMany(j => j.ObjectList).Distinct();

您可以使用Distinct() with lambda?中的技巧来改变您决定某个对象是否与另一个对象不同的方式。