2013-03-28 2 views
1

Здравствуйте, у меня есть список, и я пытаюсь группировать дубликаты и добавлять их количество, чтобы сравнить его с количеством максимального количества. Единственная проблема, с которой я столкнулся, - это изоляция дубликатов и добавление их количества. Я пришел к ментальному блоку и просто не могу понять правильный способ добиться того, что я пытаюсь. Поэтому я надеялся, что кто-то сможет указать мне в правильном направлении и помочь развязать!Группировка повторяющихся элементов в списке и добавление их итоговых значений

Свойство, я проверяю на наличие дубликатов является ProductID

double qty = 0; 
double totalQty = 0; 
bool isQtyValid = true; 

List<ShoppingCartDTO> shoppingList = ShoppingCart.Fetch(string.Format("WHERE SessionID='{0}'", Session["ID"])); 
    foreach (ShoppingCartDTO temp in shoppingList) 
    { 
     qty = temp.Quantity; 
     totalQty += qty; 
     isQtyValid = getCheckQty(totalQty, temp.ProuductID, temp.CustomerID); 
     CheckOut.Enabled = isQtyValid; 
     lblError.Visible = !isQtyValid; 
    } 

Если больше объяснив можно сделать, я могу попытаться объяснить лучше, а также предоставить больше кода, если это необходимо. Я ценю советы и помощь каждого. Благодаря!

+0

Как вы определяете «дубликат»? –

ответ

0

Если я правильно вас понял:

var groupedList = shoppingList.GroupBy(item => item.[the property you want to group by on]); 

foreach (var g in groupedList) 
{ 
    var sum = g.Sum(i => i.[the property you want to sum]); 
} 

надеюсь, что это помогает

+1

сделал именно то, что я пытался сделать, спасибо! – 2013-03-28 16:05:41

0
A.Intersect(B).Count; 

будет ли это иметь возможность подсчитать количество экземпляров? Вы также можете реализовать интерфейс IEquatable для вашего класса ShoppingCartDTO:

class ShoppingCartDTO : IEquatable<ShoppingCartDTO> 
{ 
} 
0

Старый решение стиль, что-то вроде.

List<ShoppingCartDTO> shoppingList = ShoppingCart.Fetch(string.Format("WHERE SessionID='{0}'", Session["ID"])); 
    Dictionary<String, Double> groups = new Dictionary<String,Double>(); 
    foreach (ShoppingCartDTO temp in shoppingList) 
    { 
     String key = String.Format("{0}-{1}", temp.CustomnerID, temp.ProductID); 
     if (groups.ContainsKey(key)) 
     { 
      groups[key] += temp.Quantity; 
     } 
     else 
     { 
      groups.Add(key, temp.Quantity); 
     } 
    } 
0

Предполагая, что есть какое-то свойство, которое определяет ваш "дубликат", как ProductId:

var results = shoppingList.GroupBy(s => s.ProductID) 
          .Select(g => new { 
               ProductID = g.Key, 
               totalQty = g.Sum(I => i.Quantity) 
              } 
           ); 
0

Вы могли бы сделать что-то вроде этого:

var groups = shoppingList.GroupBy(e => e.ProductId).ToList(); 
shoppingList.Clear(); 
foreach (var group in groups) 
{ 
    group.First().Quantity = group.Sum(e => e.Quantity); 
    shoppingList.Add(group.First()); 
} 

После этого запускается, shoppingList не должна содержать дубликаты и значение Quantity будет суммировано для всех дубликатов.

Смежные вопросы