2013-08-20 46 views
1

我想groupBy爲了在打印報告中顯示一些項目。Linq Group深入比較

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()方法

+0

平等== SequenceEqual或等於==相同的元素,不同的順序還OK? – xanatos

+0

這意味着偏好是「相等的」是什麼?他們是指向相同的參考還是他們持有相同的項目?那麼應該如何比較這些清單中的項目呢?該列表中有哪些類型? – Steven

+0

@xanatos你確定它是SequenceEqual嗎?訂單沒有關係。 – GorillaApe

回答

0

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