Нет, это не возвращает все значения перед фильтрацией. Take(100)
в конечном итоге будет частью отправленного SQL - возможно, с помощью TOP.
Конечно, имеет смысл сделать это, когда вы указали пункт orderby
.
LINQ не выполняет запрос, когда он достигает конца вашего выражения запроса. Он отправляет только любой SQL, когда вы вызываете оператор агрегации (например, Count
или Any
), или вы начинаете повторять результаты. Даже вызов Take
фактически не выполняет запрос - возможно, вы захотите добавить к нему дополнительную фильтрацию, например, которая может оказаться частью запроса.
При запуске итерация по результатам (как правило, с foreach
) - вот когда SQL будет на самом деле отправляется в базу данных.
(я думаю, что ваша статья where
немного сломанный, кстати. Если у вас есть проблемы с реального кода это помогло бы увидеть код как можно ближе к реальности, как это возможно.)
Я думаю, что dataContext.table_sample.Where (e => e.x == 1) .Take (100) проще читать mantain. И SampleTable кажется приятнее, чем table_sample. –
В конструкторе DataClassesDataContext (.dbml) вы также можете указать, какие столбцы извлекаются. По умолчанию все столбцы извлекаются (SELECT * в SQL). Просто нажмите на поле и просмотрите его свойства, чтобы изменить его. –