C# 在c的linq查询中获取多个连接时出错
下面指定的查询显示编译时的错误。它表示wfmilestoneprojectrel的名称不在equals右侧的范围内。考虑交换等式两边的表达式。 我如何解决这个问题? 请帮忙C# 在c的linq查询中获取多个连接时出错,c#,linq,entity-framework,C#,Linq,Entity Framework,下面指定的查询显示编译时的错误。它表示wfmilestoneprojectrel的名称不在equals右侧的范围内。考虑交换等式两边的表达式。 我如何解决这个问题? 请帮忙 var test = (from wfmilestonedefinition in _context.WF_MILESTONE_DEFINITION join wfmilestoneprojectrel in _context.WF_MILESTONE_PROJECT_REL on wfmil
var test =
(from wfmilestonedefinition in _context.WF_MILESTONE_DEFINITION
join wfmilestoneprojectrel in _context.WF_MILESTONE_PROJECT_REL
on wfmilestonedefinition.MILESTONE_ID equals wfmilestoneprojectrel.MILESTONE_ID
join workflowrecord in _context.WORKFLOW_RECORD
on wfmilestoneprojectrel.PROJECT_ID equals workflowrecord.PROJECT_ID
join workflowmilestone in _context.WORKFLOW_MILESTONE
on
new
{
wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
workflowrecord.WF_ID
} equals
new
{
MILESTONE_PROJECT_REL_ID = wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
workflowmilestone.WF_ID
}
select workflowmilestone).ToList();
下面给出了运行良好的相关Sql查询:
选择dbo.WF\u里程碑\u定义.MILESTONE\u ID,dbo.WF\u里程碑\u定义.MILESTONE\u名称,dbo.WF\u里程碑\u项目\u REL.PROJECT\u ID,
dbo.WORKFLOW\u RECORD.WF\u ID,dbo.WORKFLOW\u MILESTONE.MILESTONE\u E\u DATE
从dbo.WF\u里程碑\u定义内部联接
dbo.WF\u里程碑\u项目\u与dbo.WF\u里程碑\u定义相关。里程碑\u ID=dbo.WF\u里程碑\u项目\u相关。里程碑\u ID内部联接
dbo.WF\u里程碑上的dbo.WORKFLOW\u记录\u项目\u REL.PROJECT\u ID=dbo.WORKFLOW\u记录.PROJECT\u ID内部联接
dbo.WORKFLOW\u上的里程碑
dbo.WF_里程碑_项目_REL.millestone_项目_REL_ID=dbo.WF_里程碑_项目_REL.millestone_项目_REL_ID
dbo.WORKFLOW\u RECORD.WF\u ID=dbo.WORKFLOW\u MILESTONE.WF\u ID查看将在后台调用的联接方法的定义:
var test =
(from wfmilestonedefinition in _context.WF_MILESTONE_DEFINITION
join wfmilestoneprojectrel in _context.WF_MILESTONE_PROJECT_REL
on wfmilestonedefinition.MILESTONE_ID equals wfmilestoneprojectrel.MILESTONE_ID
join workflowrecord in _context.WORKFLOW_RECORD
on wfmilestoneprojectrel.PROJECT_ID equals workflowrecord.PROJECT_ID
join workflowmilestone in _context.WORKFLOW_MILESTONE
on
new
{
wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
workflowrecord.WF_ID
} equals
new
{
MILESTONE_PROJECT_REL_ID = wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
workflowmilestone.WF_ID
}
select workflowmilestone).ToList();
Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>,
IEnumerable<TInner>,
Expression<Func<TOuter, TKey>>,
Expression<Func<TInner, TKey>>,
Expression<Func<TOuter, TInner, TResult>>)
为什么不写:
var test =
(from wfmilestonedefinition in _context.WF_MILESTONE_DEFINITION
join wfmilestoneprojectrel in _context.WF_MILESTONE_PROJECT_REL
on wfmilestonedefinition.MILESTONE_ID equals wfmilestoneprojectrel.MILESTONE_ID
join workflowrecord in _context.WORKFLOW_RECORD
on wfmilestoneprojectrel.PROJECT_ID equals workflowrecord.PROJECT_ID
join workflowmilestone in _context.WORKFLOW_MILESTONE
on
new
{
wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
workflowrecord.WF_ID
} equals
new
{
MILESTONE_PROJECT_REL_ID = wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
workflowmilestone.WF_ID
}
select workflowmilestone).ToList();
join workflowmilestone in _context.WORKFLOW_MILESTONE
on workflowrecord.WF_ID equals workflowmilestone.WF_ID
也许我误解了什么……/P>这部分考虑把“你不理解”的两边的表达交换起来吗?你试过了吗?是的我试过了。。但是不要工作。我从sql翻译了这个查询。sql查询也可以工作。鉴于OP在两个匿名对象中都使用了wfmilestoneprojectrel.MILESTONE\u PROJECT\u REL\u ID,我觉得它可以被删除……感谢@Alexey的反馈,但我需要在OnQuery的两个站点中都使用wfmilestoneprojectrel.MILESTONE\u PROJECT\u REL\u ID,因为它会根据我的需要过滤一些数据输出。如果我想要我的方式,请帮助我,然后我如何才能做到这一点?只要看一下sql查询,你就能理解。
var test =
(from wfmilestonedefinition in _context.WF_MILESTONE_DEFINITION
join wfmilestoneprojectrel in _context.WF_MILESTONE_PROJECT_REL
on wfmilestonedefinition.MILESTONE_ID equals wfmilestoneprojectrel.MILESTONE_ID
join workflowrecord in _context.WORKFLOW_RECORD
on wfmilestoneprojectrel.PROJECT_ID equals workflowrecord.PROJECT_ID
join workflowmilestone in _context.WORKFLOW_MILESTONE
on
new
{
wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
workflowrecord.WF_ID
} equals
new
{
MILESTONE_PROJECT_REL_ID = wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
workflowmilestone.WF_ID
}
select workflowmilestone).ToList();