在列表中分组重复的项目,并添加它们的总数

本文关键字:添加 项目 列表 | 更新日期: 2023-09-27 18:06:33

你好,我有一个列表,我正试图分组重复并添加它们的数量以将其与最大数量进行比较。我遇到的唯一的问题是分离重复项并添加它们的数量。我遇到了心理障碍,想不出正确的方法来实现我正在尝试的事情。所以我希望有人能给我指出正确的方向,帮助我摆脱困境!

我要检查的重复属性是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;
    }

如果可以做更多的解释,我可以试着更好地解释,并提供更多的代码,如果需要的话。我感谢任何人的建议和帮助。谢谢!

在列表中分组重复的项目,并添加它们的总数

如果我没理解错的话:

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

希望有所帮助

A.Intersect(B).Count;

这能找出重复的项目数吗?您还可以为ShoppingCartDTO类实现等价接口:

class ShoppingCartDTO : IEquatable<ShoppingCartDTO>
{
}

老式的解决方案,比如。

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

假设有一些属性定义了您的"副本",如ProductId:

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

你可以这样做:

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值将对所有重复项求和。