我要计算列表中分组的总数据。
这是我的代码:
List<InventoryViewModel> temp =
InventoriesByLocation.GroupBy(s => s.ProductId).Select(group => group.First()).ToList();
我想计算已经groupby()的productId
个。
答案 0 :(得分:2)
类似这样的东西:
var count = InventoriesByLocation.GroupBy(s => s.ProductId).Count();
在您的情况下,GroupBy
基本上返回与IDictionary<int, InventoryViewModel[]>
等效的类型。因此,单个字典条目的长度将是唯一ProductId
的计数。
答案 1 :(得分:1)
因此,您有一个InventoryViewModels
序列,其中每个InventoryViewModel
都有一个ProductId
。
您要将所有InventoryViewModels
分组,其中每个组都包含具有相同InventoryViewModels
的所有ProductId
。之后,您要计算每个组中InventoryViewModels
的数量,还可能要计算其他一些项目。您的示例代码采用了组中的第一个元素。
var groupsWithSameProductId = inventoryViewModels
.GroupBy(inventoryViewModel => inventoryViewModel.ProductId)
现在,每个组都有一个Key
,其中包含的ProductId
与您组中的所有元素相同。该组本身是InventoryViewModels
等于ProductId
的所有Key
的序列。
要获取具有此InventoryViewModels
的{{1}}的数量,只需ProductId
个即可。如果您需要其他项目,只需Count()
:
Select
请注意,每个// continue the LINQ statement
.Select(group => new
{
ProductId = group.Key,
NrOfInventroyViewModelsWithThisProductId = group.Count(),
// only if you want other items:
FirstInventoryViewModel = group.First(),
Names = group.Select(groupItem => groupItem.Name).ToList(),
});
是一个groupItem
等于InventoryViewModel
的{{1}}
有一个overload of Enumerable.GroupBy在一个语句中结合了分组和选择:
ProductId