8

我有一个定义如下List的类型:MyObject

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

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

我打算做的是循环每个MyObjectOtherObjectObjectList属性中获取不同的值,但是我需要在列表中获取不同的值。

请注意 if: MyObject[0].Objectlist[0] == 'ItemA'并且MyObject[1].Objectlist[0] == 'ItemA'它仍然会返回一个ItemA. 这段代码只是一个表示而已。顺便说一句,这不是我访问对象的方式。

4

2 回答 2

10

您可以简单地使用Set逻辑来实现这一点。C# 以HashSet的形式有一个很好的实现:

var set = new HashSet<OtherObject>(myObjects.SelectMany(mo => mo.ObjectList));

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

var distinct = myObjects.SelectMany(mo => mo.ObjectList).Distinct();
于 2012-07-12T08:24:08.713 回答
3

怎么样:

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

您可以将Distinct() 中的技术与 lambda 一起使用吗?改变您决定一个对象是否与另一个对象不同的方式。

于 2012-07-12T08:26:24.697 回答