2012-05-19 6 views
4

엔티티에 C# linq을 사용하여 두 테이블을 함께 결합하려고합니다.C# Linq to Entities : 조인 절에있는 식 중 하나의 형식이 잘못되었습니다. 형식 유추가 실패했습니다.

하나의 테이블에는 클라이언트가 있고 다른 테이블에는 라이센스가 있습니다. 테이블은 Client_ID 및 ClientLicence_ClientID로 조인됩니다. 어떤 이유로 (그들은 내 테이블이 아님) Client_ID는 int이고 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 문을 주석 처리하면 필터링 결과가 없어도 작동합니다.

필터 변수는 함수에 전달되는 클래스입니다. 그것은 단지 하나의 속성을 가지고 있습니다 : int clientId. 에서

+0

'Where'절을 주석 처리하는 것에 대해 -이 사례를 구체적으로 확인 했는데도 작동하지 않습니다. 컴파일되지 않습니다. 여기에 오는 것과 같은 오류입니다. 당신이 단지'where' 부분을 주석 처리하는 것 이상으로 변경하지 않는다면, 나는 –

답변

6

봐 당신의 조인

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

을 주요 유형은 다음과 같습니다

  • 라는 속성을 가진 익명 형식 clientId
  • 라는 속성을 가진 익명 형식 ClientLicence_ClientID

두 개의 익명 유형을 비교할 수 없습니다. 평등. 나는 실제로 익명의 타입이 필요 없다고 생각합니다. (당신은 모든 새로운 라인이 필요하지 않습니다 분명히 - 난 그냥 명확성을 위해 다양한 비트를 분리하려고했다.)

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

당신은없이 주장 :이 일을 기대 where 절이 작동합니다.하지만 문제가되는 조인이라고 생각하면 매우 놀라운 일입니다.

+0

을 시험해 보았을 것입니다. 어쨌든, 위의 코드를 변경하고 작동합니다. 감사. –