2017-10-20 89 views
0

我試圖通過此格式的鏈接查詢提取數據。Linq查詢從一個表中提取具有相同ID的多行的詳細信息

ID | Name | PHD | MPhill | MS/Msc 
++++++++++++++++++++++++++++++++++++++++++ 
1 | abc  | Botany | Botany | - 
2 | xyz  | Zoology| -  | Zoology 

我EMPLOYEE表是:

ID | Name 
+++++++++++ 
1 | abc 
2 | xyz 

EmpAcademic Infor的表是:

ID | Emp_ref_id | Program_ref_id | Subject 
+++++++++++++++++++++++++++++++++++++++++++ 
1 | 1   | 1    | Botony 
2 | 1   | 2    | Botony 
3 | 2   | 1    | Zoology 
4 | 2   | 3    | Zoology 

表計劃是:

ID | Name 
+++++++++++ 
1 | PhD 
2 | MPhill 
3 | MS/MSc 

這裏是我的LINQ查詢

var result = (from p in Context.tblEmployees 
          join o in Context.tblEmpOfficialInfoes on p.ID equals o.Emp_ref_id 
          join a in Context.tblEmpAcademicQualifs on p.ID equals a.Emp_ref_id 
          join pro in Context.tblPrograms on a.Program_ref_id equals pro.ID 
          where pro.ID == 4 
          select new 
          { 
           p.LName, 
           pro.Name, 
           a.Subject 
          }); 

但它只提取那些已經完成博士學位的員工的詳細信息。我怎樣才能提取Mphill,MS/MSc科目沿博士。和度數的空值。

回答

0

嘗試這種解決方案:

var result = (from ea in Context.EmpAcademics 
       join emp in Context.Employees 
       on ea.Emp_ref_id equals emp.ID 
       join prog in Context.Programs 
       on ea.Program_ref_id equals prog.ID 
       group new {prog, ea} by new {emp.ID, emp.Name} into gr 
       select new { 
        gr.Key.ID, 
        gr.Key.Name, 
        PHD = gr.Where(x => x.prog.Name == "PHD") 
          .Select(x => x.ea.Subject).FirstOrDefault(), 
        MPhill = gr.Where(x => x.prog.Name == "MPhill") 
          .Select(x => x.ea.Subject).FirstOrDefault(), 
        MS_Msc = gr.Where(x => x.prog.Name == "MS/Msc") 
          .Select(x => x.ea.Subject).FirstOrDefault() 
       }).ToList(); 
相關問題