Когда Take вызывается в запросе linq?

1

Поэтому у меня есть что-то вроде этого:

public IQueryable<Teachers> GetTeachers()
{
   var query = from a in this.Context.Techers
               where a.active == true
               select a
    return query;
}

Затем я называю это следующим образом:

List<Teachers> =  this.repo.GetTeachers().Take(5000).ToList();

Скажем, где-то позже в программе я отмечаю, что эти записи активны для false;

Теперь, если я снова запустил эту программу, должен ли она вернуть нулевые записи? или он выбирает "следующие 5000 доступных" активных записей?

Теги:
linq

2 ответа

2
Лучший ответ

Вы используете LINQ to SQL (или LINQ to Entites), поэтому ваш запрос преобразуется в SQL-запросе, который будет выглядеть примерно так:

SELECT TOP 5000 *
FROM techers
WHERE active = true

То, что будет возвращено, зависит от содержания вашей таблицы в db.

Если вы отметили первые 5000 записей как неактивные, запустите его снова, вернет следующие 5000 активных элементов (если в вашей таблице все еще есть активные элементы).

1

Если вы внесли материализацию запроса в список, его нельзя выполнить снова с сервером. Список ничего не знает о выполнении запросов. Только если вы поддерживаете IQueryable, вы можете повторно выполнить запрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню