Frage

Ich habe eine Abfrage, die eine Order By-Klausel hat. Die generierte SQL von NHibernate sieht aus wie

 ORDER BY coalesce(x.Company as x__.Company, y.Company) asc 

Dies scheitert als 'als' in ORDER BY-Klausel in MS SQL Server ist nicht erlaubt. Gibt es eine Möglichkeit, Aliasing verhindern?

Die Kriterien Abfrage, dass ich geschrieben habe, sieht aus wie:

 var orderBy = Projections.SqlFunction("coalesce", NHibernateUtil.String,      
                       Projections.ProjectionList() 
                      .Add(Projections.Property("x.Company"))
                      .Add(Projections.Property("y.Company")));

 var order = Order.Asc(orderBy);
 criteria.AddOrder(order);
War es hilfreich?

Lösung

Projections.SqlFunction("coalesce",
                        NHibernateUtil.String,
                        Projections.Property("x.Company"),
                        Projections.Property("y.Company"));

die Parameter auf die coalesce (oder eine andere) Funktion separat übergeben werden (tatsächlich als params Array), nicht in eine ProjectionList verschmolzen.

Andere Tipps

Ich habe ähnliche lästige Probleme hat. Sie könnten eine Klasse von PropertyProjection abzuleiten sind und die Inplace von Projections.Property () verwenden. Überschreiben der ToSqlString Methode und die Streifen die AS-Klausel aus.

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