2009-08-25 8 views
0

J'ai 3 tables connexes dans mon employee.dbmlsimple Linq Rejoignez

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

Maintenant, comment puis-je obtenir ZoneType en passant empid dans une requête dans LINQ

S'il vous plaît aider

+0

Peut-être que je ne comprends pas complètement les colonnes de vos tables, mais certaines des clés étrangères dans vos tables me semblent un peu louche ... – jeremyalan

Répondre

0

Je pense que ce devrait le faire si je comprends bien vos tables correctement:

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(); 
3

Basé sur votre description, vous ne devriez pas besoin de rejoindre la table du département.

En outre, cela retournera un IEnumerable, donc si vous voulez une seule valeur, vous devrez gérer de manière appropriée le cas où cela ne renvoie aucun résultat, ou plusieurs résultats.

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; 
0

Il est pas clair pour moi le rôle que Dept joue ici; tel que décrit il apparaît que Emp s peut être joint à Zone s sans utiliser Dept comme intermédiaire.

// 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(); 

Peut-être que vous vouliez dire pour Dept d'avoir une colonne nommée ZoneID? Ensuite, vous diriez:

// 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(); 

En raison de l'ambiguïté dans votre question, je ne peux pas vous donner une réponse définitive mais devrait être suffisant ci-dessus pour vous orienter dans la bonne direction. Sinon, n'hésitez pas à poster un commentaire demandant des éclaircissements.