现在的位置: 首页 > 综合 > 正文

NHibernate,hql:groupby,orderby,sum()

2012年07月01日 ⁄ 综合 ⁄ 共 1102字 ⁄ 字号 评论关闭

在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

【上篇】
【下篇】

抱歉!评论已关闭.