使用Linq到SQL连接多个一对多表

使用Linq到SQL连接多个一对多表,linq,linq-to-sql,Linq,Linq To Sql,我试着把三个表合并在一起,这里是它们的一个简要总结 用户id,名称 contactdetails-id,详细信息,…,用户id 地址-id,地址,…联系人详细信息SID 如何将这3个表与linq连接到sql?编写如下内容(我无法从您的问题中读出数据库的整个结构): 当具有一对多关系时,最容易将查询基于“最多”的表。也可以用另一种方法,使用LoadWith选项。不幸的是,LINQtoSQL只支持以这种方式将两个表转换为高效查询。如果您尝试使用三个表,您将得到大量小的fetch单行查询,这将严重影响

我试着把三个表合并在一起,这里是它们的一个简要总结

用户id,名称

contactdetails-id,详细信息,…,用户id

地址-id,地址,…联系人详细信息SID

如何将这3个表与linq连接到sql?

编写如下内容(我无法从您的问题中读出数据库的整个结构):

当具有一对多关系时,最容易将查询基于“最多”的表。也可以用另一种方法,使用
LoadWith
选项。不幸的是,LINQtoSQL只支持以这种方式将两个表转换为高效查询。如果您尝试使用三个表,您将得到大量小的fetch单行查询,这将严重影响数据库的性能(请参见示例)

在这种情况下,您将获得用户contactdetail地址条目。如果要获取具有contactdetail枚举的用户以及每个contactdetail的地址枚举,则必须使用GroupJoin:

var q = from a in ctx.address
select new {
    a.address,
    a.concactdetails.detail,
    a.contactdetils.user.name
};
        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});