ich eine Liste aller verschiedenen Kontonamen Präfixe haben (az), die ichGroupBy SqlFunction auf QueryOver
var accounts = this.SessionManager.GetActiveSession().QueryOver<Account>();
var q = accounts.Select(Projections.Distinct(
Projections.SqlFunction("substring",
NHibernateUtil.String,
Projections.Property("Name"),
Projections.Constant(1),
Projections.Constant(1))));
jedoch erwerben mit, was ich will zu tun ist, anstatt eine eigene Liste der zurückkehr Gruppe die Präfixe und Rückkehr Die Anzahl der Konten, die mit diesem Präfix beginnen, aber ich bin nicht sicher, wie eine Gruppe mithilfe von Query ausgeführt wird, da sie nicht so einfach ist wie die Standard-Linkliste.
Der Grund, warum ich QueryOver und nicht Query verwende, liegt daran, dass die Teilstring-Funktion aus irgendeinem Grund im Speicher und nicht auf dem Datenbankserver ausgeführt wird.
Dies ist, wie ich in der Regel würde es tun
var prefixes = (from acc in this.SessionManager.GetActiveSession().Query<Account>()
group acc by acc.Name.Substring(0, 1)
into grp
select new
{
Prefix = grp.Key,
Count = grp.Count()
});
bearbeiten Dies ist, was ich versuchte, aber ich erhielt den folgenden Fehler
Unerkannte Methodenaufruf in Ausdruck SqlFunction ("Teilzeichenfolge “NHibernateUtil.String, new [] {Eigenschaft ("Name"), Constant (Rechnen (1)), Constant (Rechnen (1))})
var accounts = this.SessionManager.GetActiveSession().QueryOver<Account>().Select(
Projections.Group<string>(x => Projections.SqlFunction("substring", NHibernateUtil.String,
Projections.Property("Name"), Projections.Constant(1),
Projections.Constant(1))),
Projections.Count<string>(x => Projections.SqlFunction("substring", NHibernateUtil.String,
Projections.Property("Name"), Projections.Constant(1),
Projections.Constant(1)))
);
Die Teilstring-Funktion benötigt einen zusätzlichen Parameter, aber das hat das Problem gelöst. Vielen Dank – JConstantine