【发布时间】:2011-09-16 11:09:48
【问题描述】:
我正在尝试使用 NHibernate 中的 QueryOver 执行一些简单的 SQL(使用 sql server 2005)。查询是统计一个序列号在一个项目列表中被重复使用了多少次,然后选择只使用1次的序列号。请注意,我不想使用不同的序列号,因为我不想使用超过 1 次使用的序列号。
执行此操作的 SQL 查询是:
SELECT SERNUM, expr1
FROM (SELECT SERNUM, COUNT(SERNUM) AS expr1
FROM ITEM
GROUP BY SERNUM) AS derivedtbl_1
WHERE (expr1 = 1)
到目前为止,我使用 QueryOver 所做的是:
var query = session.QueryOver<Item>()
.Select(Projections.ProjectionList()
.Add(Projections.Count<Item>(x => x.Sernum))
.Add(Projections.GroupProperty("Sernum"))).List();
此代码生成 SQL(尽管它不喜欢将 Count() 列放入列表)。我不确定如何访问由 Count() 生成的数据列,只返回 1 的位置。它生成的 SQL 是:
SELECT count(this_.SERNUM) as y0_,
this_.SERNUM as y1_
FROM ITEM this_
GROUP BY this_.SERNUM
我不确定我是否以正确的方式处理这个问题,但希望有人能指出我。
【问题讨论】:
-
.Add(Projections.Count
- (x => x.Sernum).As("count"))
标签: nhibernate queryover