2009-04-27 12 views
0

Je voudrais faire un appel de base de données pour récupérer les données suivantes, mais j'ai du mal à comprendre à quoi devrait ressembler le LINQ. Voici mon implémentation actuelle (je sais que c'est mauvais !!):Comment extraire les enregistrements et tous les enregistrements enfants dans une base de données dans les entités ADO.NET?

var photos = from photo in entitiesContext.Photo 
      join pg in entitiesContext.PhotoGallery on photo.PhotoGallery.PhotoGalleryID equals pg.PhotoGalleryID 
      where pg.PhotoGallery == photoGalleryID 
      select photo; 

var photoList = photos.ToList(); 

foreach (var photoForLoading in photoList) 
{ 
    photoForLoading.UserReference.Load(); 
    photoForLoading.PhotoComments.Load(); 

    foreach (var comment in photoForLoading.PhotoComment) 
    { 
     comment.UserReference.Load(); 
    } 
} 

return photoList; 

Comme vous pouvez le voir ci-dessus, je veux récupérer:

  • Toutes les photos d'une galerie photo spécifique:
    • Les détails de l'utilisateur sur chaque photo
    • Les commentaires sur chaque photo
      • Th détails e utilisateur sur chaque commentaire

Comment puis-je faire cela dans LINQ avec cadre Entités de ADO.NET?

Cheers, Ash.

Répondre

6

Utilisez la méthode .Include pour charger les entités associées. Par exemple:

from photo in entitiesContext.Photo 
          .Include("UserReference") 
          .Include("PhotoComments") 
etc... 
+0

Je suppose que cela se traduira par une instruction SQL (avec quelques jointures internes) envoyé au serveur SQL? Aussi les photos ne peuvent contenir aucun commentaire, aurais-je besoin de faire une sorte de jointure externe gauche? – Ash

+0

Non s'il y a un commentaire, vous aurez une valeur, s'il n'y a pas de commentaire, vous obtiendrez NULL. Vérifiez les nulls devrait être suffisant. – mhenrixon

1

Lorsque vous créez votre ObjectQuery, appelez la méthode Inclure , en passant au nom de la sous-entité que vous voulez charger automatiquement. Vous pouvez enchaîner les appels à Inclure si vous avez plusieurs sous-sites que vous voulez charger.

Voir ce article pour plus d'informations.

Questions connexes