2012-04-04 5 views
2

J'ai un modèle, qui contient un champ DateTime et un champ Prix. Je veux obtenir une liste qui me donne une agrégation de mois/année - prix donc pour les données:groupe par mois et par année pièces utilisant queryover

  1. 15/01/2012 200
  2. 16/01/2012 200
  3. 15/02/2012 300
  4. 16/02/2012 300
  5. 15/03/2012 400
  6. 16/03/2012 400

J'obtiendrai:

  1. 01/2012 400
  2. 02/2012 600
  3. 03/2012 800

Jusqu'à présent, je ne trouve pas un moyen de cela en utilisant QueryOver achive. Je continue d'obtenir "ne peut pas résoudre la propriété" lorsque j'essaie de regarder les parties Mois/Année de la date.

Ces questions:

Group posts by year, then by month

Group/Sort by Date Year/Month, Partial Select with NHibernate (Projection? Transformation?)

mais j'ai répondu en utilisant LINQ - pas ce que je cherche.

Des idées? Merci

(en utilisant NHibernate 3.2)

Répondre

2

QueryOver est pas un bon choix, car le regroupement devra être fait en utilisant une expression SQL. Pour ce type de requête, QueryOver est simplement une abstraction inutile qui n'ajoute aucune valeur.

Si vous devez le faire en utilisant QueryOver vous pourriez faire quelque chose comme:

session.QueryOver<...>() 
    .SelectList(list => list 
     .Select(GroupProperty(Projections.SqlProjection(...))) 
     .SelectSum(x => x.Price) 
    ); 
+0

dans les critères que vous devrez utiliser la même projection ... qui est ce que j'espérais se déplacer, alors que recommandez-vous si pas le QueryOver? –

+0

Probablement utiliser ICriteria. Ou vous pouvez mapper une requête SQL similaire à l'idée expliquée ici: http://ayende.com/blog/3948/nhibernate-mapping-named-queries-query-and-sql-query. Si vous voulez garder les chaînes magiques et le code spécifique à la base de données dans un seul endroit, alors ce dernier serait le chemin à parcourir. –