2010-11-18 104 views
0

嗯,我想在這裏加入3個表是其中的一個簡要加入多一個一對多的LINQ表到SQL

用戶 - 編號,名稱,.....

contactdetails - ID,細節,....,用戶id

ADRESS - ID,ADRESS,....... contactdetailsId

我如何將linq to sql這3個表加入?

回答

1

喜歡寫東西(我不能從你的問題中讀出DB的整個結構):

var q = from a in ctx.address 
select new { 
    a.address, 
    a.concactdetails.detail, 
    a.contactdetils.user.name 
}; 

有一個一對多的關係,當它是最容易立足於表的查詢其「是最多的」。可以通過其他方式來使用它並使用LoadWith選項。不幸的是,linq-to-sql僅支持將兩個錶轉換爲高效查詢。如果您使用三張表進行嘗試,您會得到一小筆一行查詢,導致數據庫拖動性能下降很多(有關示例,請參見http://coding.abel.nu/2011/11/always-check-generated-sql/)。

0
 ContactDetail[] ContactDetails = new ContactDetail[0]; // your contact detail entries 
     Address[] Addresses = new Address[0]; // your address entries 
     User[] Users = new User[0]; // your user entries 
     Users.Join(ContactDetails, user => user.ID, cd => cd.ID, (user, cd) => new { User = user, ContactDetail = cd }).Join(Addresses, UserAndCD => UserAndCD.ContactDetail.ID, address=>address.ContactDetailID, (UserAndCD, address)=> new {User = UserAndCD.User, ContactDetail = UserAndCD.ContactDetail, Address = address}); 

在這種情況下,您將獲得user-contactdetail-address條目。如果你想讓用戶使用contactdetail枚舉和每個contactdetail的地址枚舉,那麼你必須使用GroupJoin: