1

印刷レポートでいくつかの項目を表示するために、groupBy を使用したいと考えています。

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

これはうまくいきます。ただし、各製品には、比較したいいくつかの好みがあります。

products.Preferencesだから私はそれが等しい場合にのみgroupByしたいEnumerable<Preference>。設定は equals() を実装します

4

1 に答える 1

0

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);
}
于 2013-08-20T15:28:17.747 に答える