计算列表中分组的每个数据

时间:2018-11-11 20:17:47

标签: c# list linq

我要计算列表中分组的总数据。

这是我的代码:

List<InventoryViewModel> temp =
    InventoriesByLocation.GroupBy(s => s.ProductId).Select(group => group.First()).ToList();

我想计算已经groupby()的productId个。

2 个答案:

答案 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