如何使用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()的好处.
我在我的方言子类中注册了一个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.可以吗?