2015-11-10 131 views
0

我需要在任何記錄或者具有債券的賠償類型,或已債券放棄返回true。我認爲,由於內部聯接發生的方式,這不起作用。Linq查詢涉及4聯接的表,到多對多表

var HasBondorWaived = (from a in context.Allocations 
         join p in context.Permits on a.PermitGUID equals p.GUID 
         join i in context.Indemnities on a.IndemnityGUID equals i.GUID 
         join t in context.IndemnityTypes on a.IndemnityAreaTypeGUID equals t.GUID 
         where (p.GUID.Equals(PermitGuid) 
         && (t.Description.Equals("Performance Bonds") || t.Description.Equals("Payment Bonds"))) 
         || p.BondRequirementWaived where p.GUID.Equals(PermitGuid) 
         select a).Any(); 
return HasBondorWaived; 

我越來越近了。在「履約保證金」或「付款保證金」的情況下,我的確認工作正常,但在BondRequirementWaved的情況下不起作用。這是EF中的一個布爾值,在SQL服務器中也有一點。在BondRequirementWaved的情況下,它返回false。

using (var context = new KEPTEntities()) 
     { 
      var HasBondorWaived = (from a in context.Allocations 
            join p in context.Permits on a.PermitGUID equals p.GUID 
            join i in context.Indemnities on a.IndemnityGUID equals i.GUID 
            join t in context.IndemnityTypes on i.IndemnityTypeGUID equals t.GUID 
            where (p.GUID.Equals(PermitGuid) 
            && (t.Description.Equals("Performance Bonds") 
            || t.Description.Equals("Payment Bonds") 
            || p.BondRequirementWaived)) 
            select a).Any(); 
      return HasBondorWaived; 
+0

我覺得哪裏只對第4次加入。關閉括號在from前面的左括號是錯誤的。參見例如在以下網頁:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

回答

2

第二個where子句將無法按預期工作。你需要刪除它。

你可能想這樣的:

where (p.GUID.Equals(PermitGuid) 
&& (t.Description.Equals("Performance Bonds") || t.Description.Equals("Payment Bonds") 
|| p.BondRequirementWaived)) 

假設你有導航屬性設置,這是更清潔:

var HasBondorWaived=context.Allocations 
    .Where(a=>a.Permits.GUID.Equals(PermitGuid)) 
    .Any(a=>a.Permits.BondRequirementWaived || 
    a.Indemnities.Any(i=>i.IdemnityType.Description=="Performance Bonds" || i.IdemnityType.Description=="Payment Bonds")); 

的硬類,看看有什麼你實際上需要的,但我認爲這就是你想要的基於你的問題而沒有明確的實體模型。

+0

我覺得這是非常接近的,但我似乎無法得到它的工作。它在任何情況下都會返回錯誤。我沒有導航屬性,所以我不能使用更乾淨的建議。 – Chris

+0

表格之間的關係如何?他們都是1:1,1:0-1還是1:*? –

+0

你的答案奏效。謝謝。 – Chris