Quick Info über was ich zu erreichen versuche. Ich habe einige Protokolltabellen und füge die Daten in eine einzelne Zeile für jedes Protokollelement ein. Das Problem, das ich habe, versucht, ein STUFF (Abfrage, 1,1, '') in NHibernate zu replizieren. Ich habe alle meine Beziehungen einrichten und arbeiten und die Abfrage mit nur den Joins funktioniert gut, kann einfach nicht herausfinden, wie das STUFF mit einer Abfrage in es implementieren.STUFF SQL-Abfrage in NHibernate, im Grunde versucht, MySQLGroupConcat zu replizieren
Dies ist die gesamte Abfrage:
SELECT h.*, u.FirstName, u.LastName, eh.*,
STUFF((
SELECT CONCAT(c.Name, ' - ')
FROM SubHistory sh
LEFT JOIN Cust c ON c.CustID = sh.SubCustId
WHERE h.Id = sh.HistoryId
FOR XML PATH ('')), 1, 1, ''
) AS Subs
FROM History h
LEFT JOIN EmailHistory eh ON eh.HistoryId = h.Id
LEFT JOIN Usr u ON u.UsrID = h.UserId
Das Ergebnis was ich brauche ist (Spalten):
H.ID - H.ReportID - H.UserID - (Concatenated Subs) - u.FirstName - u.LastName - eh.Email
ich dies in Nhibernate ohne STUFF tun können, etwa so:
IList<History> hist = session.QueryOver<History>(() => historyAlias)
.Left.JoinAlias(() => historyAlias.User,() => usrAlias)
.Left.JoinAlias(() => historyAlias.Email,() => emailAlias)
.List();
Ich folgte dem Tutorial hier http://blog.andrewawhitaker.com/blog/2014/08/15/queryover-series-part-7-using-sql-functions/ zum Erstellen der STUFF-Funktion, aber ich glaube nicht, dass es erstellt wurde mit der Idee, es so zu benutzen, wie ich es möchte, und ich konnte es nicht erfolgreich zum Laufen bringen.
Also, meine Frage kann und wie kann ich STUFF so implementieren, wie ich will? Oder gibt es einen besseren Ansatz, um die gewünschten Informationen zu erhalten?
Datenbank Referenzbeispiel:
Geschichte Tabelle
ID - ReportID - Name - UserID
SubHistory Tabelle - (kann viele sein)
ID - HistoryID - SubInfo
Usertable
ID - FirstName - LastName
Cust Tabelle
ID - CustInfo
EmailHistory Tabelle - (kann nur eine hat)
ID - HistoryID - Email
Ist es wirklich 'den harten Teil stuff'? Diese Funktion hat nichts besonderes. Ich bin mir ziemlich sicher, dass der eigentliche Straßenblock die "for xml" Unterabfrage ist, die Sie darin aufrufen. Wie kann dies als Entitätsabfrage übersetzt werden? –
Nun, wenn ich verstehe, was Sie sagen, das ist im Grunde meine Frage. Die Unterabfrage im "STUFF" bekommt, was ich brauche. die verketteten Spalten der Unterabfrage. Wie kann das in NHibernate repliziert werden?Also, ja, vielleicht ist STUFF nicht der schwierige Teil, sondern Teil dessen, was ich herausfinden will. –