2014-03-27 54 views
1

但對於1加入我得到錯誤當調用多個加盟我想加盟與多個條件的多個表的條件得到錯誤

聯接子句中的類型的表達式之一的不正確。在「加入」的調用中,類型推斷失敗。

from aq in auditUnitQuestions 
join wt in questionWt on aq.AuditQuestionWtID equals wt.AuditQuestionWtID 
join qt in auditQuestions on wt.AuditQuestionID equals qt.AuditQuestionID 
join ac in AuditComponents on qt.ComponentID equals ac.ComponentID 
join kra in AuditKRAs on new { ac.ComponentID, qt.KRAID } equals new { kra.ComponentID, kra.KRAID } 
//below I am getting error (The type of one of the expressions in the join clause 
//is incorrect. Type inference failed in the call to 'Join'. 
join prm in auditParameters on new { kra.KRAID, qt.AuditParametersID } equals new { prm.AuditKRAID, prm.AuditingParametersID } 
where aq.Unitcode == calendar.UnitCode 
&& wt.AuditTypeID == auditType 
&& qt.Isactive == "Y" 
+0

你有沒有試圖減少到最短的查詢失敗?例如,擺脫'aq','wt'和'ac'部分,因爲它們不是失敗連接的一部分......和where子句。 –

回答

1

的問題是,你'重新加入兩個匿名類型,但這些類型不兼容 - 屬性名稱不同。你必須有一個單一的鍵類型,所以基本上equals的兩邊必須是相同的類型。

取而代之的是:

new { kra.KRAID, qt.AuditParametersID } 
equals new { prm.AuditKRAID, prm.AuditingParametersID } 

你應該是這樣的:

new { kra.KRAID, qt.AuditParametersID } 
equals new { KRAID = prm.AuditKRAID, AuditParametersID = prm.AuditingParametersID } 

或者你可以只明確了兩個匿名類型指定相同的名字:

new { x = kra.KRAID, y = qt.AuditParametersID } 
equals new { x = prm.AuditKRAID, y = prm.AuditingParametersID } 

中當然,kra.KRAID的類型必須與prm.AuditKRAID的類型相同,並且li kewise qt.AuditParametersID的類型必須與prm.AuditingParametersID的類型相同或者匿名類型仍然不匹配。

1

我認爲這個問題是平等條件必須命名或具有相同的名稱,這就是爲什麼你有這個更換有問題的行:

join prm in auditParameters on 
     new { KRAID = kra.KRAID, AuditID = qt.AuditParametersID } 
    equals 
     new { KRAID = prm.AuditKRAID, AuditID = prm.AuditingParametersID } 
0

你的你的加入不能有匿名類型,你必須命名參數平等條件:

join prm in auditParameters on new 
{ 
    kraID = kra.KRAID, auditParameterID = qt.AuditParametersID 
} 
equals new 
{ 
    kraID = prm.AuditKRAID, auditParameterID = prm.AuditingParametersID 
} 

而且,參數類型必須相同。 kra.KRAID必須與prm.AuditKRAID具有相同的類型。