关于c#:使用LINQ的GroupBy和Count

GroupBy and Count using LINQ

本问题已经有最佳答案,请猛点这里访问。

我有一个名为component的类,它具有以下属性:

1
2
3
4
5
public class Component
{
    public string VerticalType {get; set;}
    public string ProductCode {get; set;}
}

我有一个清单:

1
public List<Component> ComponentList;

并说在列表中包含以下项目:

1
2
3
4
Internet   54896
TV         24859
Video      48596
Internet   35969

我有一本字典,我想用VerticalType作为键并作为值来填充它。所以我的字典应该是这样的:

1
2
3
(Internet,2)
(TV,1)
(Video,1)

我正在尝试这样的方法,但不知道如何计算。

1
2
3
4
var results = lead.SelectedOffer.ComponentList.GroupBy(
     p => p.VerticalType,
     p => p.VerticalTypeCount,
     (key, g) => new { VerticalType = key, Count =  });

要获得一组中的计数,可以使用Count()方法:

1
Count = g.Count()

另一个注意事项是,由于您只需要从VerticalType到count的映射,所以我建议您执行以下操作:

1
2
lead.SelectedOffer.ComponentList.GroupBy(p => p.VerticalType)
                  .ToDictionary(g => g.Key, g => g.Count());

或者,如果您希望坚持匿名类型的IEnumerable,那么您仍然不需要在示例代码中使用这种特定的GroupBy重载,而是需要这种重载:

1
2
lead.SelectedOffer.ComponentList.GroupBy(p => p.VerticalType)
                  .Select(g => new { VerticalType = g.Key, Count = g.Count() });