使用连接和聚合函数的linq查询

时间:2015-04-13 06:50:30

标签: c# mysql sql linq sql-server-2008

我想写一个linq查询,它以下列格式检索数据。

假设有两个表 - DepartmentEmployee

Department
Dept_id| Manager_id   

Employee
Emp_id| Dept_id| Emp_data

DepartmentEmployee表之间的关系是一对多的。 Department表还存储该特定部门中的经理员工ID。因此Manager_id只是employee_id

现在我想获取如下数据

Dept_id, Manager_id, Emp_data(data of Manager_id), Count(employees in that department)

如果我在两个表上进行联接,我可以获取Manager的数据但无法获得该部门中所有员工的计数。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

你可以这样做:

var result= 
    (
        from dep in db.Department
        join emp in db.Employee
            on dep.Manager_id equals emp.Emp_id
        select new
        {
            dep.Dept_id,
            emp,
            NumberOfEmp= db.Employee.Count(c=>c.Dept_id==dep.Dept_id)
        }
    ).ToList();

其中db是linq数据上下文

答案 1 :(得分:0)

您可以进行群组加入。如果您有一个首选的手动编码SQL语句,您希望从LINQ查询生成该语句。你可能想用不同的格式进行一些实验,看看哪一个允许你生成" best" SQL。

var result = from d in context.Departments
             join e in context.Employees on d.dept_id equals e.dept_id into g
             select new {
                 dept_id = d.dept_id,
                 manager_id = d.manager_id,
                 manager_data = g.Single(x => x.emp_id == d.manager_id).emp_data,
                 employee_count = g.Count()
             };

var result = from d in context.Departments
             join e in context.Employees on d.dept_id equals e.dept_id into g
             from m in g where m.emp_id == d.manager_id
             select new {
                 dept_id = d.dept_id,
                 manager_id = d.manager_id,
                 manager_data = m.emp_data,
                 employee_count = g.Count()
             };