Frage

Wenn ich eine einfache benannte Abfrage definiert, das Vorformen einer Zählfunktion, auf einer Spalte:

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

  </query>

Wie erhalte ich das Ergebnis einer Summe oder jede Abfrage, die Rückkehr eines der abgebildeten Einheiten nicht mit NHibernate Entweder IQuery oder ICriteria?

Hier ist mein Versuch (im nicht in der Lage, es zu testen jetzt), würde diese Arbeit?

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


            return query.UniqueResult<decimal>();
        }
    }
War es hilfreich?

Lösung 2

Es tut uns leid! Ich wollte eigentlich eine Summe, nicht eine Zählung, die eine Menge erklärt. Iv die Post entsprechend bearbeitet

Dies funktioniert:

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

Der benannte Abfrage Ansatz noch stirbt, "Fehler in benannte Abfragen: {Activity.GetAllMiles}":

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


                return query.UniqueResult<double>();
            }

Andere Tipps

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

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

ich in Ihrem ursprünglichen Beispiel denken, müssen Sie nur noch query.UniqueResult (); die Zählung wird eine ganze Zahl zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top