作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在 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
我不确定我是否以正确的方式处理这个问题,但希望有人能指出我这一点。
最佳答案
var serials = session.QueryOver<Item>()
.Where(Restrictions.Eq(Projections.Count<Item>(i => i.Id), 1));
.Select(Projections.GroupProperty<Item>(i => i.Sernum))
.List();
应该生成类似的东西
SELECT SERNUM FROM ITEM GROUP BY SERNUM HAVING COUNT(*) = 1
要获取元素,请执行以下操作
var subquery = QueryOver.Of<Item>()
.Where(Restrictions.Eq(Projections.Count<Item>(i => i.Id), 1));
.Select(Projections.GroupProperty<Item>(i => i.Sernum));
var items = QueryOver.Of<Item>()
.WithSubquery.Where(i => i.Sernum).In(subquery);
.List();
关于nhibernate - 如何在 QueryOver 中使用 SQL Count(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7443796/
我是一名优秀的程序员,十分优秀!