我想写一个linq查询,它以下列格式检索数据。
假设有两个表 - Department
和Employee
Department
Dept_id| Manager_id
Employee
Emp_id| Dept_id| Emp_data
Department
和Employee
表之间的关系是一对多的。 Department
表还存储该特定部门中的经理员工ID。因此Manager_id
只是employee_id
。
现在我想获取如下数据
Dept_id, Manager_id, Emp_data(data of Manager_id), Count(employees in that department)
如果我在两个表上进行联接,我可以获取Manager的数据但无法获得该部门中所有员工的计数。任何帮助将不胜感激。
答案 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()
};