23mai 2013

NHibernate : faire un distinct en utilisant l'API Criteria

Un petit code sample pour faire un distinct en utilisant l'API Criteria de NHibernate. Nous partons du principe qu'une instance de criteria a été récupérée depuis la session.

Le cas le plus simple consiste à faire un distinct sur une seule colonne. Cela donne :

 criteria.SetProjection(Projections
    .Distinct(Property.ForName("MaPropriete")));

Pour faire un distinct utilisant plusieurs colonnes, il faut passer par une ProjectionList. En Algèbre relationnelle, la sélection des champs à récupérer depuis une base de données s'appelle une projection.

A noter qu'il est nécessaire de créer un alias sur les champs à ajouter dans la projection. Sans quoi, un exception sera levée par Hibernate.

ProjectionList projectionList 
    = Projections.ProjectionList()
        .Add(Projections
            .Alias(Property.ForName("MaPropriete"), 
                "AliasDeMaPropriete"));

ProjectList implémentant IProjection, reste à passer projectionList à Distinct :

criteria.SetProjection
    (Projections.Distinct(projectionList ));

// Récupération des résultats
IList result = criteria.List();

aucun commentaire

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.