2011-08-03 58 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