【问题标题】:C# Linq Joining tables with multi-levelC# Linq 多级连接表
【发布时间】:2012-10-31 11:59:53
【问题描述】:

我正在尝试查询 3 级表 ef_staff 表 3 次,以获得每行 3 个不同的人员对象。如何在 LINQ 中翻译这个?

SELECT a.a_appraisalid, a.a_year, c.s_staffName, c2.s_staffName, c3.s_staffName
FROM   ef_appraisal a, idp_application b, ef_staff c, ef_staff c2, ef_staff c3
WHERE  a.a_appraisalid = b.a_appraisalid AND
       a.a_staffid = c.s_staffid AND
       a.a_appraisedby = c2.s_staffid AND
       a.a_reviewedby = c3.s_staffid

我已经尝试了很多方法,但是在第二次和第三次加入 Staff 时仍然出现错误“类型推断失败”。我在这里错过了什么?

from application in applications

join appraisal in pmsEntities.ef_appraisal on application.a_appraisalid equals appraisal.a_appraisalid

join staff in pmsEntities.ef_staff on appraisal.a_staffid equals staff.s_staffid

join appraiser in pmsEntities.ef_staff on staff.s_appraisedby equals appraiser.s_staffid into ap

from appraiser in ap.DefaultIfEmpty() 

join reviewer in pmsEntities.ef_staff on staff.s_reviewedby equals reviewer.s_staffid into rv

from reviewer in rv.DefaultIfEmpty() 

join company in pmsEntities.ef_company on appraisal.a_companyid equals company.c_companyid into jc

from company in jc.DefaultIfEmpty()

select appraisal, staff.staffName, appraiser.staffName, reviewer.staffName, company.compName

【问题讨论】:

  • 您能否格式化您的查询以使其对人类可读?
  • 您使用哈希联接而不是普通联接是否有原因?
  • 没道理,join是前作者用的。
  • 您的列的数据类型是什么,特别是您在连接中使用的列?你打算扩展你的查询吗?由于您只在结果集中使用表 ef_appraisal 中的列,因此您可以将查询更改为使用 WHERE IN () 来消除连接。
  • 我正在使用所有连接的表,连接列是 id,所以它是 int 或 string。

标签: c# linq join multi-level


【解决方案1】:

我修正了错误。员工对象的第一级加入应该链接到员工对象的第二级,如下所示:

join staff in pmsEntities.ef_staff on appraisal.a_staffid equals staff.s_staffid into staffj

                    from staff1 in staffj

                    join appraiser in pmsEntities.ef_staff on staff1.s_appraisedby equals appraiser.s_icno into staff2

`

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    相关资源
    最近更新 更多