1

我想 groupBy 以便在打印报告中显示一些项目。

model.OrderItems = model.OrderItems
    .GroupBy(p => p.Product.Id, (key, values) =>
    {
        values.FirstOrDefault().Quantity = values.Count();
        return values.FirstOrDefault();
    }).ToList();

这工作正常。但是,每种产品都有一些我想比较的偏好。

所以我想 groupBy 只有当products.Preferences这是一个Enumerable<Preference>相等的时候。首选项实现 equals()

4

1 回答 1

0

在 Product 的 Equals 实现中,使用此方法检查相等的 Preferences:

public static bool ItemsEquals<T>(this IEnumerable<T> source1, IEnumerable<T> source2)
{
    var counter = new Dictionary<T, int>();
    foreach (T item in source1)
    {
        if (counter.ContainsKey(item))
        {
            counter[item]++;
        }
        else
        {
            counter.Add(item, 1);
        }
    }
    foreach (T item in source2)
    {
        if (counter.ContainsKey(item))
        {
            counter[item]--;
            if (counter[item] < 0)
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    return counter.Values.All(c => c == 0);
}
于 2013-08-20T15:28:17.747 回答