【问题标题】:LINQ double join statementLINQ 双连接语句
【发布时间】:2013-12-14 15:28:51
【问题描述】:

我有一个名为 Workbook 的表,它与表“Revisorsberetning”具有一对多的关系,该表与 Project 是多对一的关系。 所以: 工作簿 --> Revisorsberetning --> 项目

我只想获取与给定 WorkbookId 的工作簿相关的项目列表

我尝试将以下 SQL(SQL 工作)转换为 LINQ,但没有成功:

select Project.PROJECT_NAME
from Project
inner join dbo.Revisorsberetning
on dbo.Revisorsberetning.Project_ProjectId = dbo.Project.ProjectId
inner join dbo.Workbook
on dbo.Workbook.WorkbookId = 2

这是似乎无法正常工作的 LINQ(LinqPAD,这就是为什么您看到 projectS 而没有 dbcontext)查询:

var sss = from u in Projects
join uc in Revisorsberetnings on u.ProjectId equals uc.Project.ProjectId
join c in Workbooks on uc.Workbook.WorkbookId  equals c.WorkbookId
where c.WorkbookId == 2
select u.PROJECT_NAME;

【问题讨论】:

  • 如果你的意思是返回另一个值,试试select new {u.PROJECT_NAME, u.ProjectId };
  • 也在你的 linq 中的 sql dbo.Workbook.WorkbookId = 2 c.WorkbookId == 1
  • @Grundy 这只是一个错字,与我遇到的问题无关
  • @RedHotScalability 为什么不在 LIQN 查询中写 on c.WorkbookId == 2 以匹配 SQL 查询?您的 SQL 不会将 Workbook 链接到任何其他表,只是抓取 id 为 2 的行。
  • @Grundy 已删除所有错别字,它们与问题无关。 SQL 查询返回 4 个元素,LINQ 查询返回两个元素。所以查询本身有问题,而不是结果的表示(SELECT)

标签: linq sql-to-linq-conversion


【解决方案1】:

试试这个变种

var sss = from u in Projects
          join uc in Revisorsberetnings on u.ProjectId equals uc.Project.ProjectId
          from c in Workbooks
          where c.WorkbookId == 2
          select u.PROJECT_NAME;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    相关资源
    最近更新 更多