繁体   English   中英

使用Linq to SQL在表中进行自我联接或内部查询

[英]Self Join or Inner Query in a table with Linq to SQL

我有两个表UserEmployee

+-------Supervisor----------+
SupervisorId
Password
+---------------------+


+-------Employee----------+
EmployeeId
EmployeeSupervisorId
EmployeeName
+---------------------+

这是我到目前为止所做的

SupervisorName = db.Employee.Where(m => m.EmployeeSupervisorId == m.SupervisorId).Select(q => q.EmployeeName).ToList()

我不了解如何将Employee表与其自身联接的概念,因此我可以获得Employee及其对应的主管名称的列表

您可以执行以下操作

SupervisorName = db.Employee
                   .Join(db.Supervisor, 
                        emp => emp.EmployeeSupervisorId,
                        sup => sup.SupervisorId,
                        (emp, sup)=> new {SupervisorName = emp.EmployeeName})
                   .Select(x=>x) 
                   .ToList();
SupervisorName  = db.Employee.
                  Join(db.Supervisoer, e => e.EmployeeSupervisorId, s => s.SupervisorId, (e, s) => new { Employee = e, Supervisor = s}.
                  ToList().
                  Select(e => e.EmployeeName).
                  ToList();

您可以使用像这样的简单子查询

var result = db.Employee.Select(e => new
{
    Employee = e,
    SupervisorName = db.Employee
        .Where(s => s.EmployeeId == e.EmployeeSupervisorId)
        .Select(s => s.EmployeeName).FirstOrDefault()        
}).ToList();

请注意,如果您将EmployeeSupervisorId定义为指向EmployeeId的外键,则Linq2Sql将自动创建EmployeeSupervisor属性(将是Employee对象)。

   var list = from e in db.Employee
    //        where e.......  
              select new {
                 Name = e.EmployeeName,
                 Supervisor = e.EmployeeSupervisor.EmployeeName,
    //           otherdetails = e......
                 }

如果尚未定义外键,则必须在查询中显式指定它:

   var list = from e in db.Employee
              join s in db.Employee on e.EmployeeSupervisorId equal s.EmployeeId
    //        where e.......  
              select new {
                 Name = e.EmployeeName,
                 Supervisor = s.EmployeeName,
    //           otherdetails = e......
                 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM