Nhibernate 如何在QueryOver中使用SQL Count()

Nhibernate 如何在QueryOver中使用SQL Count(),nhibernate,queryover,Nhibernate,Queryover,我正在尝试使用NHibernate中的QueryOver执行一些简单的SQL(使用SQLServer2005)。查询是计算序列号在项目列表中重复使用的次数,然后选择仅使用1次的序列号。请注意,我不希望使用不同的序列号,因为我不希望使用大于1的序列号 执行此操作的SQL查询是: SELECT SERNUM, expr1 FROM (SELECT SERNUM, COUNT(SERNUM) AS expr1 FROM ITEM GROUP BY SERNUM) AS deri

我正在尝试使用NHibernate中的QueryOver执行一些简单的SQL(使用SQLServer2005)。查询是计算序列号在项目列表中重复使用的次数,然后选择仅使用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();
我不确定我是否以正确的方式处理这个问题,但希望有人能指点我

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();
var subquery=QueryOver.Of()
.式中(限制.Eq(投影.Count(i=>i.Id),1));
.Select(projects.GroupProperty(i=>i.Sernum));
var items=QueryOver.Of()
其中(i=>i.Sernum).In(子查询);
.List();

.Add(Projections.Count(x=>x.Sernum).As(“Count”))谢谢你的帮助,除了我想要的一些调整之外。
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();