2010-11-18 56 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: