首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为c#的linq查询中的多个连接获取错误

为c#的linq查询中的多个连接获取错误
EN

Stack Overflow用户
提问于 2013-07-06 17:01:08
回答 1查看 91关注 0票数 0

下面指定的查询在编译时显示错误。它说名称wfmilestoneprojectrel不在equals右侧的作用域中。考虑交换equals两端的表达式。我该如何解决这个问题?

请帮帮我。

代码语言:javascript
复制
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查询: SELECT dbo.WF_MILESTONE_DEFINITION.MILESTONE_ID,dbo.WF_MILESTONE_DEFINITION.MILESTONE_NAME,dbo.WF_MILESTONE_PROJECT_REL.PROJECT_ID,dbo.WORKFLOW_RECORD.WF_ID,dbo.WORKFLOW_MILESTONE.MILESTONE_E_DATE FROM dbo.WF_MILESTONE_DEFINITION INNER JOIN dbo.WF_MILESTONE_PROJECT_REL ON dbo.WF_MILESTONE_DEFINITION.MILESTONE_ID = dbo.WF_MILESTONE_PROJECT_REL.MILESTONE_ID INNER JOIN dbo.WORKFLOW_RECORD ON dbo.WF_MILESTONE_PROJECT_REL.PROJECT_ID = dbo.WORKFLOW_RECORD.PROJECT_ID INNER JOINdbo.WF_MILESTONE_PROJECT_REL.MILESTONE_PROJECT_REL_ID = dbo.WF_MILESTONE_PROJECT_REL.MILESTONE_PROJECT_REL_ID和dbo.WORKFLOW_RECORD.WF_ID = dbo.WORKFLOW_MILESTONE.WF_ID上的dbo.WORKFLOW_MILESTONE

EN

回答 1

Stack Overflow用户

发布于 2013-07-06 17:30:51

看看将在幕后调用的Join方法的定义:

代码语言:javascript
复制
Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, 
                                    IEnumerable<TInner>, 
                                    Expression<Func<TOuter, TKey>>, 
                                    Expression<Func<TInner, TKey>>, 
                                    Expression<Func<TOuter, TInner, TResult>>)

之所以会出现此错误,是因为在第二个join子句中变量wfmilestoneprojectrel不可用,因为向该委托传递了变量workflowmilestone (TInner):

代码语言:javascript
复制
    new 
    {
      //here is no varialbe with name wfmilestoneprojectrel
      MILESTONE_PROJECT_REL_ID = wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
      workflowmilestone.WF_ID
    }

为什么不直接写:

代码语言:javascript
复制
join workflowmilestone in _context.WORKFLOW_MILESTONE
    on workflowrecord.WF_ID equals workflowmilestone.WF_ID

也许我误解了什么..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17501382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档