2012-10-03 68 views
2
MyObject() 
{ 
    String dept; 
    List<int> id; 
    Object obj; 
} 

使用LINQ的獨特名單,我怎麼能回組織的上述對象的列表如下:集團的整數

集團通過[部門和平等的ID列表]所有的obj對象。如果列表包含相同的數字,則該列表被視爲相等,不一定是相同的順序(一組)。

回答

3

GroupBy有一個overload接受定製IEqualityComparer<MyObject>。當dept相等,並且id被設置爲相等時,寫一個關於兩個對象相等的方法,並將它作爲參數傳遞。

實行一套平等的簡便方法是寫

new HashSet(x.id).SetEquals(new HashSet(y.id)) 

雖然這最終會被低效和可能不是最好的主意,如果有很多的比較做出的。

2

大廈關閉的Jon's answer,如果效率是一個問題,你可以在HashSet每個對象存儲在一個匿名對象:

myObjects.Select(x => new { myObject = x, hashSet = new HashSet(x.id) }) 
     .GroupBy(x => x.hashSet, HashSet<int>.CreateSetComparer()) 
     .SelectMany(x => x.GroupBy(y => y.myObject.dept)) 

如果要執行只有一個GroupBy你可以存儲在該HashSetTuple或自定義班級,但您必須創建自己的IEqualityComparer