简单的Linq加入

时间:2009-08-25 02:47:26

标签: linq linq-to-sql

我的employee.dbml中有3个相关的表

Emp        dept        Zone 
empId      deptID      ZoneID 
empName    deptName    ZoneType
empage                 deptID 
empzone
deptID

现在如何通过在linQ

中的查询中传递empid来获取ZoneType

请帮忙

3 个答案:

答案 0 :(得分:3)

根据您的描述,您不需要加入Dept表。

此外,这将返回IEnumerable,因此如果您想要单个值,则需要适当地处理不返回任何结果或多个结果的情况。

int empid = GetEmpId();

var query =
   from e in db.Emp
   join z in db.Zone on e.deptId equals z.deptId
   where e.empid == empid
   select z.ZoneType;

答案 1 :(得分:0)

我认为如果我正确理解你的表,我们应该这样做:

var result = (
    from e in dbContext.Emp
    join zone_join in dbContext.Zone
        on e.deptID equals zone_join.ZoneID
    where e.empId == YourEmpID
    select zone_join.ZoneType).SingleOrDefault();

答案 2 :(得分:0)

我不清楚Dept在这里扮演的角色;如上所述,似乎Emp可以在不使用Zone作为中间人的情况下加入Dept

// these could be Tables in a DataContext
IEnumerable<Emp> emps;
IEnumerable<Zone> zones

var result = (from e in emps
              join z in zones on e.deptId equals z.DeptId
              where e.empId == employeeID
              select z.ZoneType).Single();

也许您认为Dept有一个名为ZoneID的列?然后你会说:

// these could be Tables in a DataContext
IEnumerable<Emp> emps;
IEnumerable<Dept> depts;
IEnumerable<Zone> zones;

var result = (from e in emps
              join d in depts on e.deptId equals d.deptId
              join z in zones on d.ZoneID equals z.ZoneID
              where e.empId == employeeId
              select z.ZoneType).Single();

由于你的问题含糊不清,我无法给你一个确定的答案,但上述内容足以指出你正确的方向。如果没有,请随时发表评论,要求澄清。