我有一个名为Cart_Items的列表,当用户按下添加到购物车按钮时,它会被填充。该列表包含对象ItemID和Quantity。 我需要从这个列表中获取一个项目的总数量。由于列表中有不同的项目,我无法获得特定项目的总数量。 如果我使用sum(函数)它返回所有数量的总和。 我想要实现的是,如果同一项目有多个记录,那么获得该特定项目的数量的总和。 这是类结构:
Public Class CartItem
Private m_ItemId As Integer
Public Property ItemId() As Integer
Get
Return m_ItemId
End Get
Set(value As Integer)
m_ItemId = value
End Set
End Property
Private m_Quantity As Integer
Public Property Quantity() As Integer
Get
Return m_Quantity
End Get
Set(value As Integer)
m_Quantity = Value
End Set
End Property
End Class
列表:
ItemId Quantity
1 5
3 6
1 2
1 6
4 8
所以我想得到ItemId = 1的总数量应为13。
那么获得特定itemId的总数量的最佳方法是什么? 感谢。
答案 0 :(得分:2)
您需要按照Id
对所有项目进行分组,每个组的计算总和为Quantity
。
var itemTotals = myList.GroupBy(Function(item) item.ItemId)
.Select(Function(group)
Return New With
{
.ItemId = group.Key,
.Quantity = group.Sum(Function(item) item.Quantity)
}
End Function)
.ToList()
因此,您将获得包含myList
中所有项目及其总数量的匿名对象的集合。
{ .ItemId = 1, Quantity = 13 }
{ .ItemId = 3, Quantity = 6 }
{ .ItemId = 4, Quantity = 8 }
您可以使用CartItem
类代替匿名类型,因为它在相同的上下文中具有相同的属性。所以Select
pert将如下所示:
.Select(Function(group)
Return New CartItem With
{
.ItemId = group.Key,
.Quantity = group.Sum(Function(item) item.Quantity)
}
End Function)
答案 1 :(得分:1)
首先,使用给定条件过滤项目,在这种情况下,CartItems
itemId
1
distinct
。然后选择所有数量,并应用sum
删除重复的值,最后Dim result As Integer = (From item In myList
Where item.ItemId = 1
Select item.Quantity).Distinct().Sum()
结果。
{{1}}