繁体   English   中英

在 LINQ 中编写 INNER JOIN

[英]Write an INNER JOIN in LINQ

我有以下 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

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

通用规则:

  1. 将内部查询转换为单独的查询变量
  2. 按 LINQ 短语顺序翻译 SQL 短语
  3. 使用表别名作为范围变量,如果没有,则从表名缩写创建范围变量
  4. 将 IN 翻译为包含
  5. 将 DISTINCT 或 SUM 等 SQL 函数转换为对整个查询的函数调用。
  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
          };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM