防止NHibernate在ORDER BY中出现别名

时间:2010-09-03 19:54:48

标签: nhibernate fluent-nhibernate criteria icriteria

我有一个包含Order By子句的查询。 NHibernate生成的SQL看起来像

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

这失败,因为MS SQL Server中的Order by子句中不允许使用'as'。有什么方法可以阻止别名吗?

我写的标准查询如下:

 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);

2 个答案:

答案 0 :(得分:2)

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

coalesce(或任何其他)函数的参数应该单独传递(实际上,作为params数组),而不是合并到ProjectionList中。

答案 1 :(得分:0)

我遇到过类似烦人的问题。您可能必须从PropertyProjection派生一个类并使用它来取代Projections.Property()。重写ToSqlString方法并去除AS子句。