2016-07-08 18 views
0

SPIDのプライマリキーでこれらの3つのテーブルを結合します。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 
           }); 

私の場合、画像テーブルにはインスタンスの値が含まれていません。どのように私は同じコードを使用して他のテーブルとの結合画像テーブルを避け、写真なしでVIEWに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 
           }); 
関連する問題