分组依据和计数ASP.NET MVC

本文关键字:ASP NET MVC | 更新日期: 2023-09-27 18:26:43

我正在尝试制作一个简单的记录管理应用程序。我想得到每个部门的员工总数。到目前为止我有这个。

return Context.Employees
    .GroupBy(e => e.DepartmentID)
    .Select(x => new { Employee = x.Count() });

但它给了我一条红色的摆动线,上面写着我可能错过了一个演员阵容。

无法隐式转换类型System.Linq.IQueryable<匿名类型#>到System.Collections.Generic.IEnumerable<SimpleRMA.型号.部门>。存在显式转换(是否缺少强制转换?)

这是我想要的结果:

DepartmentName | Employees 
Department1    |   4
Department2    |   6

我应该如何在lambda表达式中执行此操作?感谢

部门类别:

public class Department
{
    public int DepartmentID { get; set; }
    public string DepartmentName { get; set; }
    public string Location{ get; set; }
    public virtual List<Employee> Employees { get; set; }
}

员工类别:

 public class Employee
{
    public int EmployeeID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public DateTime Birthday { get; set; }
    public int DepartmentID { get; set; }
    public virtual Department Department { get; set; }
}

分组依据和计数ASP.NET MVC

我建议改为获得部门。看起来您在这里使用的是EntityFramework。你为什么不直接做return Context.Departments.Include("Employees")呢。这将为您提供填写了员工的部门对象集合。您可以通过执行departmentObject.Employes.count()来获得每个部门的员工数量。

您返回的是匿名类型,如果不使用dynamic关键字作为返回值,则不支持该类型。实现像这样的模型类并返回它。

public class DepartmentEmployeesModel
{
    public string DepartmentName { get; set; }
    public string Employees { get; set; }
}
return Context
         .Employees
         .GroupBy(e => e.DepartmentID)
         .Select(x => new DepartmentEmployeesModel { DepartmentName = x.Key, Employees = x.Count() }).ToList();

并将您的方法签名更改为

IEnumerable<DepartmentEmployeesModel> YourMethodName()