我的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
的单个实例。此代码仅是一种表示形式。顺便说一句,这不是我访问我的对象的方式。
答案 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?中的技巧来改变您决定某个对象是否与另一个对象不同的方式。