您好我有一个列表,我正在尝试对重复项进行分组,并添加其数量以将其与最大数量进行比较。我遇到的唯一问题是隔离重复项并添加其数量。我已陷入精神障碍,无法找到正确的方法来实现我的目标。所以我希望有人能够指出我正确的方向,并帮助我解开!
我正在检查重复项的属性是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)
A.Intersect(B).Count;
这可以找出重复的项目数吗? 您还可以为ShoppingCartDTO类实现IEquatable接口:
class ShoppingCartDTO : IEquatable<ShoppingCartDTO>
{
}
答案 1 :(得分: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]);
}
希望有所帮助
答案 2 :(得分: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);
}
}
答案 3 :(得分:0)
假设有一些属性定义了您的“重复”,例如ProductId
:
var results = shoppingList.GroupBy(s => s.ProductID)
.Select(g => new {
ProductID = g.Key,
totalQty = g.Sum(I => i.Quantity)
}
);
答案 4 :(得分: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
值将与所有重复项相加。