簡體   English   中英

在C#的linq查詢中獲取多個聯接錯誤

[英]Get Error for multiple on join in linq query for c#

下面的指定查詢顯示編譯時錯誤。 它說名稱wfmilestoneprojectrel不在equals的右側。 考慮在equals任一側交換表達式。 我該如何解決?
請幫忙...

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 JOIN dbo.WORKFLOW_MILESTONE ON dbo.WF_MILESTONE_PROJECT_REL.MILESTONE_PROJECT_REL_ID = dbo.WF_MILESTONE_PROJECT_REL.MILESTONE_PROJECT_REL_ID AND dbo.WORKFLOW_RECORD。 WF_ID = dbo.WORKFLOW_MILESTONE.WF_ID

查看將在后台調用的Join方法的定義:

Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, 
                                    IEnumerable<TInner>, 
                                    Expression<Func<TOuter, TKey>>, 
                                    Expression<Func<TInner, TKey>>, 
                                    Expression<Func<TOuter, TInner, TResult>>)

之所以出現此錯誤,是因為在第二個join子句中變量wfmilestoneprojectrel不可用,因為該委托傳遞了變量工作流里程碑(TInner):

    new 
    {
      //here is no varialbe with name wfmilestoneprojectrel
      MILESTONE_PROJECT_REL_ID = wfmilestoneprojectrel.MILESTONE_PROJECT_REL_ID,
      workflowmilestone.WF_ID
    }

為什么不寫:

join workflowmilestone in _context.WORKFLOW_MILESTONE
    on workflowrecord.WF_ID equals workflowmilestone.WF_ID

也許我誤會了..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM