【发布时间】: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