需要:
List<Orders> orders = new List<Orders>();
orders.Add(new Orders { CustomerId = 1, ProductId = 1 });
orders.Add(new Orders { CustomerId = 1, ProductId = 2 });
orders.Add(new Orders { CustomerId = 2, ProductId = 2 });
orders.Add(new Orders { CustomerId = 2, ProductId = 3 });
orders.Add(new Orders { CustomerId = 3, ProductId = 1 });
orders.Add(new Orders { CustomerId = 3, ProductId = 2 });
orders.Add(new Orders { CustomerId = 4, ProductId = 3 });
orders.Add(new Orders { CustomerId = 4, ProductId = 4 });
LINQ查询:
var groupedCustomers =
orders.GroupBy(i => i.CustomerId)
.Select(i => new { CUSTOMER = i.Key,
ORDERS = i.Select(j => j.ProductId)
.OrderBy(j => j)
//.Distinct() to ignore duplicate orders
.ToArray() })
.ToList();
var result = groupedCustomers.GroupBy(i => i.ORDERS, new IntArrayComparer()).ToList();
这里是比较器。
public class IntArrayComparer : IEqualityComparer<int[]>
{
public bool Equals(int[] x, int[] y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(int[] obj)
{
return base.GetHashCode();
}
}
编辑:如果您正在寻找更智能的GetHashCode
函数,您可以尝试类似以下代码:
public int GetHashCode(int[] obj)
{
return string.Join(",", obj.Select(i => i.ToString())).GetHashCode();
}