【问题标题】:SQL to NHibernate Criteria QuerySQL 到 NHibernate 标准查询
【发布时间】:2010-08-27 16:08:15
【问题描述】:

我正在为 MVC 应用程序使用 Sharp 架构,并且正在尝试为以下 SQL 生成休眠条件查询:

select top 10 p.* from Tab1 p 
                join Tab2 v on p.Id = v.Tab1Fk
                join Tab3 sbu on v.Id = sbu.Tab2Fk
                where sbu.DateTime >= 12/12/2002 00:00:00
                group by p.Id, p.Name, p.CoCode, p.CuCode, p.StCode, p.ParentFk, p.LastGenerated
                order by COUNT(sbu.Id) desc

目前我有:

var crit = Session.CreateCriteria<Tab1>();
        crit.SetMaxResults(numberOfRecords);
        crit.CreateCriteria("Tab2", "v", JoinType.InnerJoin)
            .CreateCriteria("Tab3", "sbu", JoinType.InnerJoin)
            .Add(Restrictions.Ge("sbu.DateTime", since))
            .AddOrder(Order.Desc(Projections.Count("sbu.Id")));
        return crit.List<Tab1>();

但是它会抛出错误,有人可以帮忙吗?

【问题讨论】:

  • 请说明您收到的例外情况。

标签: c# nhibernate fluent-nhibernate


【解决方案1】:

您是否考虑过使用HQLNHibernate.Linq?我有几个项目在我手下,我几乎从来不关心标准 api。

const string hql = @"select p.* 
                    from Tab1 p
                    join p.Tab2 v where p.Tab2.Id = v.Id
                    join p.Tab3 sbu where v.Id = sbu.Tab2.Id
                    and sbu.DateTime >= :since
                    and rownum <= 10
                    group by p.Id, p.Name, p.CoCode
                    order by count(sbu.Id) desc";
                    
var list = Session.CreateQuery(hql)
                .SetParameter("since", DateTime.Now /* your date */)
                .List<Tab1>();

看起来你很擅长 SQL,所以它们中的任何一个看起来都很自然。

编辑:我必须说我从来没有按 count(item) 排序,所以我的语法可能不正确。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    相关资源
    最近更新 更多