Поскольку вы собираетесь сравнивать список, вы должны предоставить компаратор (какие списки считаются равными?) В случае, если списки равны тогда и только тогда, когда они имеют одинаковых элементов в одинаковыхorder :
{1, 2} != {1} // wrong items number
{1, 2} != {1, 2, 3} // wrong items number
{1, 2} != {1, 3} // wrong items values
{1, 2} != {2, 1} // wrong items order
{1, 2} == {1, 2}
для сравнения может быть
public class MyListComparer<T> : IEqualityComparer<List<T>> {
public bool Equals(List<T> x, List<T> y) {
return Enumerable.SequenceEqual(x, y);
}
public int GetHashCode(List<T> obj) {
return obj == null ? -1 : obj.Count;
}
}
и Linq
var g2 = blocks.GroupBy(b => b.Values, new MyListComparer<int>());
Редактировать: Если мы хотим игнорировать порядок, мы можем реализовать немного другой компаратор:
public class MyLeanListComparer<T> : IEqualityComparer<List<T>> where T : IComparable<T> {
public bool Equals(List<T> x, List<T> y) {
if (ReferenceEquals(x, y))
return true;
else if (null == x || null == y)
return false;
return Enumerable.SequenceEqual(x.OrderBy(item => item), y.OrderBy(item => item));
}
public int GetHashCode(List<T> obj) {
return obj == null ? -1 : obj.Count;
}
}