2017-10-10 47 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 
      };