2016-08-25 17 views
1

Это может быть легко, но мне было интересно, почему всякий раз, когда вы используете процесс охотно загружаемого, .ToList() должен использоваться после .Include()?Зачем использовать .ToList после .Include in Eager Loading

Я знаю, что с нетерпением загрузка позволяет загружать связанные объекты вместе с основной сущностью для запросов, но зачем использовать .ToList()?

Это для цели памяти или что-то еще?

Для example:

using (var context = new BloggingContext()) 
{ 
    // Load all blogs and related posts 
    var blogs1 = context.Blogs 
         .Include(b => b.Posts) 
         .ToList(); // why is this needed? 
} 

Любое объяснение/помощь очень ценится.

+0

http://stackoverflow.com/questions/30624700/which-linq-statements-force-entity-framework-to-return-from-the-db – BenG

+1

Я также предлагаю проверить эту ссылку: https://msdn.microsoft.com/en-us/library/bb738633(v=vs.110).aspx. Это объясняет выполнение отложенных/немедленных запросов. –

+0

Кто вам сказал, что вы * имеете * использовать ToList при использовании Include? Неправда. –

ответ

4

Это происходит во время вызова ToList(), когда запрос действительно будет немедленно выполнен. Таким образом, ваша предыдущая установка Include будет проекция до попадания в базу данных

+0

хорошо, ваш ответ вместе со ссылкой, что raderick опубликовал в комментариях, определенно помог. Спасибо. –