小编twe*_*erq的帖子

NHibernate QueryOver <> - SubQuery上的聚合函数

如何使用QueryOver <>语法编写以下SQL语句?

SELECT COUNT(*) FROM (
    SELECT FirstName,LastName 
    FROM People 
    GROUP BY FirstName, LastName
    ) as sub_t
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有内部查询工作:

var q = _session.QueryOver<Person>()
    .SelectList(l => l
        .SelectGroup(x => x.FirstName)
        .SelectGroup(x => x.LastName));
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何将它包装在子查询中并从中获取行数.可以吗?

不幸的是我的RDBMS方言(MsSqlCe40Dialect)不支持COUNT DISTINCT,所以我没有使用SelectCountDistinct()的好处.

c# sql nhibernate sql-server-ce queryover

6
推荐指数
1
解决办法
1257
查看次数

NHibernate的QueryOver语法可以选择SqlFunction的MAX()吗?

我在我的方言子类中注册了一个SQL函数

RegisterFunction("addseconds", new SQLFunctionTemplate(NHibernateUtil.Date, "dateadd(second, ?1, ?2)"));
Run Code Online (Sandbox Code Playgroud)

可以在这样的查询中使用

var q = _session.QueryOver<Event>()
    .Select(
        Projections.SqlFunction(
            "addseconds",
            NHibernateUtil.Date,
            Projections.Property<Event>(x => x.DurationInSeconds),
            Projections.Property<Event>(x => x.StartTime)));
Run Code Online (Sandbox Code Playgroud)

生成SQL

SELECT dateadd(second,
               this_.DurationInSeconds,
               this_.StartTime) as y0_
FROM   [Event] this_
Run Code Online (Sandbox Code Playgroud)

但我真正追求的是

SELECT MAX(dateadd(second,
               this_.DurationInSeconds,
               this_.StartTime)) as y0_
FROM   [Event] this_
Run Code Online (Sandbox Code Playgroud)

不幸的是,我似乎无法让SelectMax采用Projections.SqlFunction.可以吗?

.net c# sql nhibernate

3
推荐指数
1
解决办法
3682
查看次数

标签 统计

c# ×2

nhibernate ×2

sql ×2

.net ×1

queryover ×1

sql-server-ce ×1