林克集团通过深度比较
本文关键字:深度 比较 林克 | 更新日期: 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.Preferences
和Enumerable<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);
}