在nh的查詢中有這樣的需求,不僅需要對象,而且需要這個對象的其他附加屬性。
比如:
場景:浙江省的景區投票評選
需求:選出投票數最多的10個景區
這樣就需要景區對象和sum(票數)
/// <summary> /// 獲?得?地?區?景°區?投?票±排?行D /// </summary> /// <param name="area_code">地?區?編à碼?</param> /// <param name="scenic_name">景°區?名?稱?</param> /// <returns></returns> public IList<Model.VoteRank> GetScenicsByVote(string area_code, string scenic_name) { area_code = area_code.Substring(0, 2) + "__00"; string strQuery = "select v.Scenic.Name,sum(v.Num) from Vote v where "; if (!string.IsNullOrWhiteSpace(area_code)) { strQuery += " v.Scenic.Area.Code like '" + area_code+"'"; if (!string.IsNullOrWhiteSpace(scenic_name)) { strQuery += " and v.Scenic.Name='" + scenic_name + "'"; } } else if(!string.IsNullOrWhiteSpace(scenic_name)) { strQuery += " v.Scenic.Name='" + scenic_name + "'"; } strQuery += " group by v.Scenic.Name order by sum(v.Num) desc"; var query = session.CreateQuery(strQuery).List<object[]>(); IList<Model.VoteRank> result=new List<Model.VoteRank>(); foreach (var item in query) { result.Add(new Model.VoteRank() { ScenicName = item[0].ToString(), Num = int.Parse(item[1].ToString()) }); } return result; }
參考
http://stackoverflow.com/questions/692975/nhibernate-group-by-and-count?answertab=votes#tab-top