在LINQ中写一个INNER JOIN

时间:2017-10-10 16:24:33

标签: c# sql-server linq sql-server-2012

我有以下SQL查询。我想知道如何在LINQ和C#中编写相同的查询。

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

1 个答案:

答案 0 :(得分:1)

我认为使用查询理解语法而不是lambda语法来翻译SQL更容易。

一般规则:

  1. 将内部查询转换为单独的查询变量
  2. 以LINQ短语顺序翻译SQL短语
  3. 使用表别名作为范围变量,如果没有,则创建范围 表名缩写中的变量
  4. 将IN翻译为包含
  5. 将诸如DISTINCT或SUM之类的SQL函数转换为函数调用 关于整个查询。
  6. 为多列分组或加入
  7. 创建匿名对象

    使用这些规则,您应该得到类似的内容:

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