2010-11-18 4 views

Répondre

1

écrire quelque chose comme (je ne peux pas lire toute la structure de la base de données à partir de votre question):

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

Quand ayant un à-plusieurs, il est plus facile de baser la requête sur la table qui "est le plus grand nombre". Il est possible de le faire dans l'autre sens et d'utiliser les options LoadWith. Malheureusement, linq-to-sql ne supporte que la traduction de deux tables en querys efficaces. Si vous l'essayez avec trois tables, vous obtiendrez une charge de petites requêtes de fetch-one-line qui atteignent la DB en faisant glisser les performances terriblement (voir http://coding.abel.nu/2011/11/always-check-generated-sql/ pour un exemple).

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}); 

Dans ce cas, vous obtiendrez des entrées d'adresse de contact-contact. Si vous voulez obtenir un utilisateur avec l'énumération contactdetail et un énumération d'adresses pour chaque contactdetail, alors vous devez utiliser GroupJoin:

Questions connexes