2012-07-12 88 views
8

MyObject類型的List下面的定義:LINQ獲取列表中從列表中唯一項目

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

鑑於MyObject類型的List,使用LINQ我應該用什麼表情,讓所有不同OtherObject

我打算做的是循環每個MyObject並從ObjectList屬性中獲得不同的OtherObject屬性,但是隨後我需要在整個列表中獲得清晰的結果。

請注意,如果: MyObject[0].Objectlist[0] == 'ItemA'MyObject[1].Objectlist[0] == 'ItemA'它仍然會返回單個實例ItemA。此代碼只是一種表示。順便說一下,這不是我訪問我的對象的方式。

+0

http://stackoverflow.com/questions/1300088/distinct-with-lambda這可能是值得一看的東西。 – 2012-07-12 08:25:11

回答

10

您可以簡單地使用Set邏輯來實現這一點。 C#具有在HashSet形式一個很好的實現:

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

或者如果你願意延遲執行,你可以使用LINQ Distinct方法:

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

謝謝!我有一個對象,它是一個更大對象的屬性,也就是列表中的列表。能夠通過執行'data.SelectMany(d => d.Refs).Select(r => r.MyObject).Distinct()'這比使用'.ForEach()'更簡單。 – jwatts1980 2014-02-12 18:15:13

3

如何:

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

您可以使用Distinct() with lambda?中的技術來更改如何確定對象是否與另一個對象不同。