(Заявление об ограничении ответственности: я изменил / запутал некоторые имена переменных / таблиц / столбцов здесь из соображений безопасности. Простите меня, если что-то выглядит не так.)
Я создаю интерфейс для базы данных Oracle 10g и пытаюсь получить выгружаемые данные. Помимо подкачки, следующий код SubSonic 2.2 дает мне то, что я хочу, в том порядке, в котором я хочу:
var q = new Select()
.From(AppDb.MyTable.Schema)
.Where(AppDb.MyTable.DisabledDateColumn).IsNull()
.OrderDesc(AppDb.MyTable.CreatedDateColumn.ColumnName)
System.Console.Out.Writeline(q.BuildStatement());
Это дает следующий SQL:
SELECT
MYSCHEMA.MYTABLE.ID,
MYSCHEMA.MYTABLE.DISABLED_DATE
FROM
MYSCHEMA.MYTABLE
WHERE
MYSCHEMA.MYTABLE.DISABLED_DATE IS NULL
ORDER BY
CREATED_DATE DESC
Затем я пытаюсь ввести пейджинг:
var q = new Select()
.From(AppDb.MyTable.Schema)
.Where(AppDb.MyTable.DisabledDateColumn).IsNull()
.OrderDesc(AppDb.MyTable.CreatedDateColumn.ColumnName)
.Paged(0, 10);
И он стирает мои предложения WHERE и ORDER BY:
SELECT * FROM (
SELECT
MYSCHEMA.MYTABLE.ID,
MYSCHEMA.MYTABLE.DISABLED_DATE,
ROWNUM as row_number
FROM
MYSCHEMA.MYTABLE
)
WHERE
row_number BETWEEN 1 AND 10
Я новичок в SubSonic, поэтому не знаю, является ли это ошибкой, или я просто делаю это не так, как нужно, или Oracle требует, чтобы это было сделано другим, более ориентированным на Oracle способом. (Oracle, кажется, требует этого от всего.)
Что я хочу, если это неочевидно, - чтобы каждая последующая страница включала 10 следующих последних созданных, неотключенных записей. Как я могу это сделать в SubSonic 2.2?