2017-10-10 69 views
-8

我有以下SQL查詢。我想知道如何在LINQ和C#中編寫相同的查詢。在LINQ中寫入INNER JOIN

select ph.Id,p.Id as projInfoId, ph.Title, ph.AdditionalHours, ph.AdditionalCost, 
    ph.InsertDate, ph.InsertBy, ph.LastUpdateDate, ph.LastUpdateBy, ph.TeamId, 
    ph.ProjInfoId 
from tblTeamType t 
    join ProjInformation p on t.team_id = p.teamId 
    join projProject pj on p.projectId=pj.projectId 
    inner join ProjInfoAdditionalHrs ph on p.teamId = ph.teamId and p.Id = ph.proJinfoid 
+0

你有什麼迄今所做?你嘗試過Google嗎? – Eric

+0

是的,我已經試過這段代碼 –

+1

所以發佈你的代碼。 – Eric

回答

1

我認爲使用查詢理解語法而不是lambda語法來轉換SQL更容易。

一般規則:

  1. 翻譯內查詢到單獨的查詢變量
  2. 翻譯在LINQ短語順序SQL語句
  3. 使用表別名爲範圍的變量,或者如果沒有,創建範圍從表 變量名稱縮寫
  4. 將IN轉換爲包含
  5. 將SQL函數(如DISTINCT或SUM)轉換爲函數調用 對整個查詢。
  6. 創建多列分組或加入

使用這些規則匿名對象,你應該得到的東西,如:

var ans = from t in tblTeamType 
      join p in ProjInformation on t.team_id equals p.teamId 
      join pj in projProject on p.projectId equals pj.projectId 
      join ph in ProjInfoAdditionalHrs on new { p.teamId, p.Id } equals new { ph.teamId, ph.proJinfold } 
      select new { 
       ph.Id, 
       projInfoId = p.Id, 
       ph.Title, 
       ph.AdditionalHours, 
       ph.AdditionalCost, 
       ph.InsertDate, 
       ph.InsertBy, 
       ph.LastUpdateDate, 
       ph.LastUpdateBy, 
       ph.TeamId, 
       ph.ProjInfoId 
      };