2009-04-27 2 views
0

Я хотел бы сделать один вызов базы данных для получения следующих данных, но я изо всех сил пытаюсь понять, что должно выглядеть LINQ. Вот моя текущая реализация (я знаю, что это плохо !!):Как вы извлекаете записи и все дочерние записи в одной базе данных в объектах 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; 

Так как вы можете видеть выше, я хочу получить:

  • Все фотографии с конкретной фотогалерее:
    • подробности пользователя на каждой фотографии
    • комментарии на каждой фотографии
      • Th е пользовательские детали на каждый комментарий

Как это сделать в LINQ с ADO.NET Entities Framework?

Cheers, Зола.

ответ

6

Используйте метод .Include для загрузки связанных объектов. Например:

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

Я предполагаю, что это приведет к тому, что один оператор SQL (с парой внутренних соединений) отправлен на SQL-сервер? Кроме того, фотографии могут не содержать каких-либо комментариев, нужно ли мне делать какую-то форму левого внешнего соединения? – Ash

+0

Нет, если есть комментарий, у вас будет значение, если нет комментариев, вы получите NULL. Проверить нули должно быть достаточно. – mhenrixon

1

При создании ObjectQuery, вызовите Включить метод, передавая имя subentity, который вы хотите автоматически загружать. Вы можете подключать вызовы к Include, если у вас есть несколько сущностей, которые вы хотите загрузить.

Для получения дополнительной информации см. Это article.

Смежные вопросы