SelectMany
дополнительный метод уже делает это.
Проекты каждый элемент последовательности к IEnumerable< (< (T>)>), и сглаживает получающиеся последовательности в одну последовательность.
Вот все, что вы можете сделать с помощью SELECT (взято из здесь ):
SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]
Итак, вы ищете следующее выражение:
SELECT * FROM clients ORDER BY id LIMIT 10
Обратите внимание, что СМЕЩЕНИЕ очень полезно для разбивки на страницы:
ПРЕДЕЛ 10 СМЕЩЕНИЕ 11
для второй страницы из 10.
MySQL использует:
SELECT * FROM clients ORDER BY id LIMIT 10;
, специфичный для MySQL. Долгое время не было аналогов в других базах данных, но стандарт SQL: 2008 вводит дополнительный синтаксис:
SELECT * FROM clients FETCH FIRST 10 ROWS ONLY;
и:
SELECT * FROM clients OFFSET 1 FETCH NEXT 10 ROWS ONLY;
Но проблема в том, что этот синтаксис пока не поддерживается MySQL и большинством других баз данных. Если вы заботитесь о переносимости, вам следует следить за развитием событий.
Помните, что вы всегда должны использовать ORDER BY
предложения, иначе результат может быть случайным для разных вызовов.