使用QueryOver這有點問題,因爲我們在使用SQL函數時需要使用Projections。
我放棄了abs(...)
,因爲它時並不需要,因爲x * x == -x * -x
選項1:使用SqlProjection(不漂亮,但更短)
int x = 10;
int y = 20;
var result = session.QueryOver<Product>()
.OrderBy(Projections.SqlProjection(
@"power(x - " + x.ToString() + ", 2) + power(y - " + y.ToString() + ", 2) as tmporder",
new string[] { "test" },
new NHibernate.Type.IType[] { NHibernateUtil.Int32 })).Asc
.List();
選項2:使用SqlFunction - 這是長並需要看看下面的鏈接:
這樣的事情(你需要包括從鏈接OperatorProjection;它不完整,我沒有測試它)
.OrderBy(Projections.SqlFunction("power", NHibernateUtil.Double,
new ArithmeticOperatorProjection("+", NHibernateUtil.Int32,
Projections.Property<Product>(p => p.x), Projections.Constant(x)),
Projections.Constant(2))).Asc
NHibernate and the missing OperatorProjection Part 1
可悲的是,我得到'當前方言NHibernate.Dialect.MsSql2008Dialect不支持的功能:power' ..有什麼解決辦法或我要使它成爲一個*一個? – 2011-05-23 15:04:34
@ŁukaszW.pl這很奇怪。我使用SQL 2008數據庫和NH 3.1測試了選項1,它沒有給出錯誤警告。你使用的是什麼版本的NHibernate? – 2011-05-24 10:04:10
最新的可能,但不要擔心..我的工作周圍..感謝您的幫助;) – 2011-06-01 12:31:06