按顺序防止NHibernate产生别名

按顺序防止NHibernate产生别名,nhibernate,fluent-nhibernate,criteria,icriteria,Nhibernate,Fluent Nhibernate,Criteria,Icriteria,我有一个查询,它有一个ORDERBY子句。从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

我有一个查询,它有一个ORDERBY子句。从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);

我也有过类似的恼人问题。您可能必须从PropertyProjection派生一个类,并在Projections.Property()中使用该类。重写ToSqlString方法并去掉AS子句

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

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

Tim,覆盖应该是什么?我尝试了这样的操作:public override SqlString ToSqlString(ICriteria条件、int loc、ICriteriaQuery条件、IDictionary enabledFilters){返回新的SqlString(this.PropertyName);}但这引发了一个异常:System.ArgumentException未经用户代码Message处理=长度应大于或等于0,或者就此而言,在我提供的覆盖中返回新的SqlString(新字符串[]{this.PropertyName});我也收到了同样的意见,除了银行迭戈!这很有帮助。我有一段时间被这个问题困扰了。嗨,我也面临着类似的问题。但我在projections列表中添加了条件排序列,并在最后提供给Orderby()的函数中,得到了“AS”破坏SQL的结果。我需要使用多种条件对所有列进行排序。有什么想法吗?