林克集团通过深度比较

本文关键字:深度 比较 林克 | 更新日期: 2023-09-27 18:28:29

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

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

这很好用。然而,每种产品都有一些我想比较的偏好。

所以我只想在products.PreferencesEnumerable<Preference>相等的情况下groupBy。首选项实现equals()

林克集团通过深度比较

在Product的Equals实现中,使用以下方法检查相等的首选项:

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);
}