2010-06-03 8 views
3

Est-il possible d'obtenir NHibernate pour générer une requête similaire à celle-ci avec HQL ou API Criteria?NHibernate Query

select 
    * 
from (
    select 
     row_number() over (partition by Column1 order by Column2) as RowNumber, 
     T.* 
    from 
     MyTable T 
) 
where 
    RowNumber = 1 

je peux l'obtenir pour exécuter la sélection interne en utilisant l'attribut de formule, mais je ne peux pas trouver un moyen d'écrire un HQL ou une requête Les critères qui me permet Enveloppez la sélection interne dans l'externe.

+2

Lorsque nous avons besoin d'être aussi précis sous la forme de la requête, nous utilisons simplement des requêtes nommées pour y parvenir. – Cobusve

+0

nous sommes venus accroos avec ce problème, lors de la pagination de grands ensembles de données. Il y a un bug avec NHibernate. Ce que nous avons fait était d'utiliser un dialecte SQL cusom. Peut-être que cela pourrait aider? http://www.webdevbros.net/2010/11/11/nhibernate-returns-duplicate-results-on-paged-data-sets-work-around/ –

+0

+1 pour Cobusve pour suggérer des requêtes nommées. – odez213

Répondre

-1

NHibernate 3 a le Linq au fournisseur NHibernate intégré, de sorte que vous pouvez écrire des requêtes pour la pagination comme:

Session.Query<Customer>().Skip(10).Take(10).ToList(); 

Cela devrait aider.

+0

Qu'en est-il de la partition? –