[英]nHibernate complex Query
我在使用nHibernate查詢時遇到問題。
我有以下實體:
public class CostAmount
{
public virtual int Id {get;set;}
public virtual Year Year{get; set;}
public virtual Month Month{get; set;}
}
public class Year
{
public virtual int Id {get;set;}
public virtual string Code {get;set;}
}
public class Month
{
public virtual int Id {get;set;}
public virtual string Code {get;set;}
}
我想使用類似以下的SQL查詢:
select * from CostAmount ca
inner join Year y on ca.YearID = y.ID
inner join Month m on ca.MonthID = m.ID
where y.Code *100+m.Code between 9107 and 9207
誰能幫我一下。
正如我所寫的那樣,NHibernate QueryOver在數學運算方面的語法很差……現在,如果我們認為Code
為int
(因為我通常不將字符串乘以100):
// Aliases
CostAmount costAmount = null;
Year year = null;
Month month = null;
// Projections for the math operations
// y.Code * 100
var proj1 = Projections.SqlFunction(
new VarArgsSQLFunction("(", "*", ")"),
NHibernateUtil.Int32,
Projections.Property(() => year.Code),
Projections.Constant(100)
);
// proj1 + m.Code
var proj2 = Projections.SqlFunction(
new VarArgsSQLFunction("(", "+", ")"),
NHibernateUtil.Int32,
proj1,
Projections.Property(() => month.Code)
);
// The query
var query = Session.QueryOver(() => costAmount)
.JoinAlias(() => costAmount.Year, () => year)
.JoinAlias(() => costAmount.Month, () => month)
.Where(Restrictions.Between(proj2, 9107, 9207));
var res = query.List();
也許您可以檢查此問題Fluent Nhibernate內部聯接
也許從這個解釋可以指導您找到正確的答案。 http://ayende.com/blog/4023/nhibernate-queries-examples
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.