嗯,我想在這裏加入3個表是其中的一個簡要加入多一個一對多的LINQ表到SQL
用戶 - 編號,名稱,.....
contactdetails - ID,細節,....,用戶id
ADRESS - ID,ADRESS,....... contactdetailsId
我如何將linq to sql這3個表加入?
嗯,我想在這裏加入3個表是其中的一個簡要加入多一個一對多的LINQ表到SQL
用戶 - 編號,名稱,.....
contactdetails - ID,細節,....,用戶id
ADRESS - ID,ADRESS,....... contactdetailsId
我如何將linq to sql這3個表加入?
喜歡寫東西(我不能從你的問題中讀出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/)。
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: