2011-08-03 83 views
0

我有一個解釋:這是否適合Linq GroupBy?

 Dictionary<Project,List<User>> dictionary, 

每個項目都有一組用戶。

我想檢索組織數據,使得它們都具有類似的用戶項目安排到這種數據結構:

 List<Tuple<List<Project>,List<User>>> 

我甚至不知道從哪裏開始。我一直在爲此奮戰數天。

+0

與類似用戶相同的用戶是指在其子集合中具有相同用戶的項目? – Jeroen

+0

是的,這就是我的意思。在繼承人子集合中擁有相同用戶的項目。 – Attilah

回答

1

用戶列表是你應該分組的關鍵。在GroupBy()你可以使用像這樣的一個比較器:

public class ListComparer<T> : IEqualityComparer<List<T>> 
    where T : IComparable<T> 
{ 
    public bool Equals(List<T> x, List<T> y) 
    { 
     return x.OrderBy(u => u).SequenceEqual(y.OrderBy(u => u)); 
    } 

    public int GetHashCode(List<T> obj) 
    { 
     return obj.GetHashCode(); 
    } 
} 

BTW:比較程序是對列表而不是IEnumerables,否則每個比較比較的對象應被一遍又一遍列舉。

+1

您可能想要關注[此主題](http://stackoverflow.com/questions/6948019/linq-implementation-of-cartesian-product-with-pruning)瞭解更強大的比較器。 –

0

你最好最好的做法是平坦化dictionary的內容並進行查詢。

+0

我該怎麼辦? – Attilah