查找自定义类型列表的最大计数

woo*_*gie 1 c# linq asp.net

我有一个模拟应用程序,其中继承链等 Employee,Manager,President.

Employee类看起来像

class Employee
    {
        public int EmployeeId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime HireDate { get; set; }

        public Employee() 
        { 
        }
    }
Run Code Online (Sandbox Code Playgroud)

和Manager类看起来像

 class Manager : Employee
    {

        private List<Employee> employeesManaged = new List<Employee>();
        public List<Employee> EmployeesManaged
        {
            get { return employeesManaged; }
            set { employeesManaged = value; }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想编写一个方法来查找管理大多数员工的经理(其EmployeesManaged.Count属性是最大的).我目前有两个问题.

  1. 正如您在下面的代码中看到的,我必须手动将每个Manager添加到List变量中.这不是一个长期的解决方案.解决这个问题的有效,简洁的方式是什么?

  2. 我的Linq语法不正确.

我认为第一个问题是最紧迫的.如果有1000个Employee对象,我将如何规避将每个对象添加到列表中?

 public static Manager  GetBestManager(List<Manager> managerList)
        {
            Manager m = managerList.Select(x => x.EmployeesManaged).Max();

        }
Run Code Online (Sandbox Code Playgroud)

我的主要方法

Employee e = new Employee();
            e.EmployeeId = 101;
            e.FirstName = "Tom";
            e.LastName = "Jones";
            e.HireDate = DateTime.Now.Subtract(TimeSpan.FromDays(40));

            Employee e2 = new Employee();
            e2.EmployeeId = 102;


            Employee e3 = new Employee();
            e3.EmployeeId = 103;


            Manager m = new Manager();
            m.EmployeeId = 201;
            m.EmployeesManaged.Add(e);
            m.EmployeesManaged.Add(e2);

            Manager m2 = new Manager();
            m2.EmployeesManaged.Add(e3);

            List<Manager> mList = new List<Manager>();
            mList.Add(m);
            mList.Add(m2);
            Manager.GetBestManager(mList);
Run Code Online (Sandbox Code Playgroud)

使用当前语法,我收到错误'无法将类型Employee隐式转换为Manager

Ed *_*pel 8

1)这取决于数据的来源.内存集合中的数据库,磁盘文件.通常,该List结构或任何结构由源确定.

2)您的LINQ获得最大数量,而不是Manager最高数量.尝试:

public static Manager GetBestManager(List<Manager> managerList)
{
    Manager m = managerList.OrderByDescending(x => x.EmployeesManaged.Count).First();
    return m;
}
Run Code Online (Sandbox Code Playgroud)