2 Stimmen

Hilfe mit NHibernate Criteria Abfrage groupby Eigenschaft

Ich habe die folgende Frage,

SearchTemplate Template = new SearchTemplate();
            Template.Criteria = DetachedCriteria.For(typeof(table1));

            Template.Criteria.CreateCriteria("table2", "Usr", NHibernate.SqlCommand.JoinType.InnerJoin)

                 .SetProjection(Projections.ProjectionList()
                 .Add(Projections.Count("Usr.ID"), "UserCount")
                  .Add(Projections.GroupProperty("Location"), "ALocation")
                  .Add(Projections.GroupProperty("Company"), "ACompany")
                  .Add(Projections.GroupProperty("Usr.Designation"), "ADesignation"));  

Die obige Abfrage gibt mir Daten als,

Location   Company    Designation   Count
  Florida      A          Manager       3
  Florida      A          QA            5
  Texas        B          Manager       6
  Texas        B          QA            7

Gibt es eine Möglichkeit, die Abfrage so zu ändern, dass sie die Daten als,

  Location   Company    Manager    QA               
  Florida      A           3       5
  Texas        B           6       7

Hier sind Manager und QA die einzigen möglichen Werte, die in das Feld "Bezeichnung" eingegeben werden können.

6voto

Diego Mijelshon Punkte 52110

Anstelle von

.Add(Projections.Count("Usr.ID"), "UserCount")
.Add(Projections.GroupProperty("Usr.Designation"), "ADesignation")

Sie benötigen zwei Projektionen, eine pro Ergebnisspalte:

.Add(Projections.Sum(Projections.Conditional(
                                 Restrictions.Eq("Usr.Designation", "Manager"),
                                 Projections.Constant(1),
                                 Projections.Constant(0)))
.Add(Projections.Sum(Projections.Conditional(
                                 Restrictions.Eq("Usr.Designation", "QA"),
                                 Projections.Constant(1),
                                 Projections.Constant(0)))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X