我想计算通用列表中特定组的出现次数

时间:2016-11-10 11:41:59

标签: c# linq

我有两节课。

public  class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

我有上述课程的数据,请查看以下内容。

  List<Employee> lstEmployee = new List<Employee>();
  lstEmployee.Add(new Employee() { FirstName = "Ronak", LastName = "Patel" });
  lstEmployee.Add(new Employee() { FirstName = "Ronak", LastName = "Patel" });
  lstEmployee.Add(new Employee() { FirstName = "Sanjay", LastName = "Patel" });
  lstEmployee.Add(new Employee() { FirstName = "Ronak", LastName = "Patel" });
  lstEmployee.Add(new Employee() { FirstName = "Sanjay", LastName = "Patel" });
  lstEmployee.Add(new Employee() { FirstName = "Ronak", LastName = "Patel" });
  lstEmployee.Add(new Employee() { FirstName = "Mohan", LastName = "Patel" });

我希望过滤器在通用列表上方并绑定到下面的结构类中。

class CountEmployeeName
{
    public string FirstName { get; set; }
    public int CountFirstName { get; set; }
}

我希望绑定CountEmployeeName类对象,如上面的示例所示。

FirstName    CountFirstName 
Ronak              4         (Ronak is 4 time in above Employee class list)
Sanjay             2         (Sanjay is 4 time in above Employee class list)
Mohan              1         (Mohan is 4 time in above Employee class list)

我想根据Employee List的给定数据绑定CountEmployeeName类的通用列表,如上面的输出。

1 个答案:

答案 0 :(得分:3)

使用linq group by然后在select项目中使用第二种类型:

from item in lstEmployee
group item by item.FirstName into grouping
select new CountEmployeeName
{
    FirstName = grouping.Key,
    CountFirstName = grouping.Count()
}

在方法语法中,它将如下所示:

lstEmployee.GroupBy(item => item.FirstName)
                   .Select(grouping => new CountEmployeeName { 
                       FirstName = grouping.Key, 
                       CountFirstName = grouping.Count() 
                   });

请注意,我建议将CountFirstName更改为int而不是string