2012-10-15 11 views
5

Come implementeresti una query che seleziona ogni ennesima riga, con NHibernate QueryOver, HQL o Criteria?Seleziona ogni ennesima riga con NHibernate

Attualmente io uso la seguente query T-SQL:

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Id) AS [Row] 
    FROM [TABLE_NAME] 
) x WHERE (x.[Row] % 100) = 0 

(Grazie a Marc Gravell)

risposta

0

Uguale L2S - non c'è facile modo per fare questo senza SQL. E la sintassi sarebbe comunque specifica per DBMS.

+0

La soluzione che utilizza row_number() è piuttosto indipendente dal DBMS (come tutti i moderni supporti DBMS che oggigiorno). L'unica cosa che dipende dal DBMS è l'operatore modulo. –

2

Avete considerato la soluzione di utilizzare una tabella di indicizzazione in un cross join? Quello che voglio dire è che hai una tabella con tutte le righe che pensi di aver bisogno con una colonna indicizzata di numeri interi che vanno da 1-n in ogni riga. Questo può essere in un database principale, magari con una colonna data accanto: è sorprendente quanto sia utile questo metodo. La query sembrerebbe quindi

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Id) AS [Row] 
    FROM [TABLE_NAME] 
) x INNER JOIN [Index_Table] i ON i.Id*100=x.[Row] 
Problemi correlati