2008-09-15 11 views
2

Wenn ich eine einfache benannte Abfrage definiert, das Vorformen einer Zählfunktion, auf einer Säule:NHibernate, Sum Abfrage

<query name="Activity.GetAllMiles"> 
    <![CDATA[ 
     select sum(Distance) from Activity 
    ]]> 

    </query> 

Wie kann ich das Ergebnis einer Summe oder eine Abfrage erhalten, die Rückkehr eines nicht die zugeordneten Entitäten mit NHibernate mit entweder IQuery oder ICriteria?

Hier ist mein Versuch (im unfähig, es jetzt zu testen), würde das funktionieren?

public decimal Find(String namedQuery) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      IQuery query = session.GetNamedQuery(namedQuery); 


      return query.UniqueResult<decimal>(); 
     } 
    } 

Antwort

2

Entschuldigung! Ich wollte eigentlich eine Summe, keine Zählung, was vieles erklärt. Iv bearbeitet die Post entsprechend

Dies funktioniert:

var criteria = session.CreateCriteria(typeof(Activity)) 
          .SetProjection(Projections.Sum("Distance")); 
    return (double)criteria.UniqueResult(); 

Die benannte Abfrage Ansatz stirbt nach wie vor, "Fehler in benannte Abfragen: {Activity.GetAllMiles}":

using (ISession session = NHibernateHelper.OpenSession()) 
      { 
       IQuery query = session.GetNamedQuery("Activity.GetAllMiles"); 


       return query.UniqueResult<double>(); 
      } 
4

Als indirekte Antwort auf Ihre Frage, hier ist, wie ich es ohne eine named Abfrage mache.

var session = GetSession(); 
    var criteria = session.CreateCriteria(typeof(Order)) 
      .Add(Restrictions.Eq("Product", product)) 
      .SetProjection(Projections.CountDistinct("Price")); 
    return (int) criteria.UniqueResult(); 
0

Ich denke, in Ihr ursprüngliches Beispiel, Sie müssen nur abfragen.UniqueResult(); Die Zählung gibt eine ganze Zahl zurück.