我想在这里加入3个表是对它们的简要总结
用户 - id,name,.....
contactdetails - id,detail,...., userId
地址 - id,地址,....... contactdetailsId
如何将这3个表与linq连接到sql?
答案 0 :(得分:1)
写一些类似的东西(我无法从你的问题中读出数据库的整个结构):
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/示例)。
答案 1 :(得分: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: