【问题标题】:Write an INNER JOIN in LINQ在 LINQ 中编写 INNER JOIN
【发布时间】:2017-10-10 16:24:32
【问题描述】:

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

【问题讨论】:

  • 到目前为止你做了什么?你试过谷歌吗?
  • 是的,我试过这个代码
  • 所以发布你的代码。
  • 请不要只发布 SQL 并要求转换。至少显示一个类模型,以便导航属性和关联的多样性是可见的。此外,请说明您的目标是什么类型的 LINQ(针对实体?),并展示您自己的初步努力,以便我们可以看到具体您需要帮助的地方。

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


【解决方案1】:

我认为使用查询理解语法而不是 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
          };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2016-11-24
    • 2018-04-04
    • 2022-07-07
    • 2010-10-06
    • 2015-03-30
    相关资源
    最近更新 更多