在我当前的LINQ查询结束时,我的数据形式为IEnumerable<IEnumerable<int>>
,有几个重复的组合。
例如:
{
{5, 20}
{5, 20}
{10, 15}
}
过滤这些内容的最佳方法是什么,以便每个集合仅代表一次? LINQ答案是理想的,所以我可以进一步链接。
答案 0 :(得分:5)
如果你创建一个这样的序列相等比较器:
class SequenceEqualityComparer<T> : IEqualityComparer<IEnumerable<T>> {
public bool Equals(IEnumerable<T> a, IEnumerable<T> b) {
if (a == null) return b == null;
if (b == null) return false;
return a.SequenceEqual(b);
}
public int GetHashCode(IEnumerable<T> val) {
return val.Where(v => v != null)
.Aggregate(0, (h, v) => h ^ v.GetHashCode());
}
}
然后,您可以拨打.Distinct(new SequenceEqualityComparer<int>())
。