2015-03-20 1 views
0

Я использую Entity Framework. Скажем, у меня есть метод:Возврат IQueryable <T> как IEnumerable <T> приведет к вызову базы данных?

public IEnumerable<User> GetUsers() // return IEnumerable<User> 
{ 
    using (var context = new AppDbContext()) 
    { 
     return context.Users; 
    } 
} 

Теперь, когда я звоню:

var users = GetUsers(); 

Будет ли эта операция выполнить запрос к базе данных или нет?

+0

нет, потому что 'IQueryable : IEnumerable '. – DLeh

+0

@DLeh да, я проверил это, но я был немного смущен. – Andrei

+0

Возможно, путаница была в том, что OP читала что-то о том, как 'AsEnumerable()' может инициировать запрос (поскольку он перечисляет коллекцию)? – moarboilerplate

ответ

3

Нет, если вы ничего не делаете с этим, нет.

Однако, если вы попытаетесь выполнить итерацию по результатам (или вызовите Count() и т. Д.), Тогда она попытается сделать вызов базы данных ... и я ожидаю, что это произойдет, потому что вы избавились от контекста в таком случае.

+0

Спасибо, Джон! Помогает! – Andrei

+0

@Jon Что делать, если у меня есть список на виду? должен ли я отправлять IEnumerable или List, который снова повторяет последний? – brykneval

+0

@brykneval: Не уверен, что вы подразумеваете под «списком на виду», или тем, что означает ваш второй вопрос. Вероятно, вы должны задать вопрос в новом посте. –