2016-07-08 4 views
0

SPID의 기본 키에서이 세 테이블을 조인하려고합니다.LINQ를 사용하여 여러 테이블에 가입

picture Table 
[PIC_ID] INT    
[pic_name] VARCHAR  
[SPID]  INT   
[pic]  VARBINARY (MAX) 

service_provider table 
[SPID]   INT   
[Sp_email]  VARCHAR 
[Sp_password] VARCHAR 
[Sp_name]  VARCHAR 
[Sp_location] VARCHAR 
[City_ID]  INT 

city Table 
[City_ID] INT   
[Cityname] VARCHAR  

위의 SPID에있는 테이블에 가입하려면 아래 쿼리를 작성하십시오.

var sp_details = (from s in db.service_provider 
           join p in db.pictures on s.SPID equals p.SPID 
           join c in db.cities on s.City_ID equals c.City_ID 
           where s.SPID == id 
           select new ImageData() 
           { 
            SPID = s.SPID, 
            Sp_name = s.Sp_name, 
            Sp_location = s.Sp_location, 
            Cityname = c.Cityname, 
            service_type = s.service_type, 
            Sp_description = s.Sp_description, 
            Sp_rate = s.Sp_rate, 
            Sp_web = s.Sp_web, 
            Cnt_wh = s.Cnt_wh, 
            pic = p.pic 
           }); 

제 경우에는 그림 테이블에 인스턴스 값이 없습니다. 다음 어떻게 같은 코드를 사용하여 다른 테이블과 조인 그림 테이블을 피하고 사진없이 볼 sp_details를 반환합니다. 누군가가 나를이 문제를 해결하는 데 도움을 주시면 고맙습니다.

+0

왜 탐색 속성을 사용하지 않습니까? – Kinetic

+0

EF를 사용하고 있습니까? – Kinetic

+0

[왼쪽 외부 조인] (https://msdn.microsoft.com/en-us/library/bb311040.aspx#Anchor_2) –

답변

0

정확하게 이해했다면 이미지가 없는데도 요소를 가져와야하므로 올바른 결합을 사용해야합니다. 오른쪽의 조인에서 모든 행을 반환해야합니다. 이미지가 없습니다.

var sp_details = (from s in db.service_provider 
           right join p in db.pictures on s.SPID equals p.SPID 
           join c in db.cities on s.City_ID equals c.City_ID 
           where s.SPID == id 
           select new ImageData() 
           { 
            SPID = s.SPID, 
            Sp_name = s.Sp_name, 
            Sp_location = s.Sp_location, 
            Cityname = c.Cityname, 
            service_type = s.service_type, 
            Sp_description = s.Sp_description, 
            Sp_rate = s.Sp_rate, 
            Sp_web = s.Sp_web, 
            Cnt_wh = s.Cnt_wh, 
            pic = p.pic 
           }); 
관련 문제