2012-05-19 27 views
4

我想連接兩個表一起使用C#linq實體。C#Linq to Entities:連接子句中的一個表達式的類型不正確。類型推斷失敗

一個表具有客戶端,另一個表具有許可證。這些表由Client_ID和ClientLicence_ClientID連接。出於某種原因(它們不是我的表),Client_ID是一個i​​nt,ClientLicence_ClientID是一個字符串。

我的代碼是:

var licences = (from client in entities.Clients 
          join licence in entities.ClientLicences 
          on new { clientId = SqlFunctions.StringConvert((double)client.Client_ID) } equals 
          new { licence.ClientLicence_ClientID } 
          into clientGroup 
          where (filter.clientId == 0 || client.Client_ID == filter.clientId) 
          select licence); 

當我嘗試編譯此我得到一個錯誤:聯接子句中的類型的表達式之一的不正確。在「GroupJoin」調用中,類型推斷失敗。

如果我註釋掉where語句,那麼它有效(雖然沒有過濾結果)。

filter變量是一個傳遞給函數的類。它只有一個propery:int clientId。

+0

你說什麼關於評論'哪裏'條款 - 我特別檢查了這個案例和不,它不工作,它甚至不編譯。這是你得到的錯誤。除非你改變的不僅僅是評論'where'部分 –

回答

6

看看你的加入:

join licence in entities.ClientLicences on 
new { clientId = SqlFunctions.StringConvert((double)client.Client_ID) } 
equals 
new { licence.ClientLicence_ClientID } 
into clientGroup 

的主要類型有:

  • 匿名類型與一個叫clientId
  • 匿名類型有一個名爲property屬性ClientLicence_ClientID

這兩個匿名類型不能比較 平等。實際上,我懷疑你在這裏不需要匿名類型。我期望這個工作:

join licence in entities.ClientLicences on 
SqlFunctions.StringConvert((double)client.Client_ID) 
equals 
licence.ClientLicence_ClientID 
into clientGroup 

(當然,你並不需要所有的新生產線 - 我只是想分離出爲清楚起見,各個位。)

你聲稱沒有where條款它的作品 - 但這將是非常令人驚訝的,因爲這是一個問題的聯接。

+0

我確信我已經嘗試過了。無論如何,我改變了我的代碼到上面,它的工作原理。謝謝。 –

相關問題