如何使用queryover
在nHibernate中实现以下查询SELECT [DepartmentID] ,COUNT(courseId)
FROM [Course]
where [DepartmentID] >1
GROUP BY [DepartmentID]
hAVING COUNT(courseId) = 2 or COUNT(courseId) = 3;
表格结构
CREATE TABLE [dbo].[Course](
[CourseID] [int] NOT NULL,
[Title] [nvarchar](100) NOT NULL,
[Credits] [int] NOT NULL,
[DepartmentID] [int] NOT NULL,
我试过的C#代码
Collection<Course> courseList = new Collection<Course>();
using (var session = NHibernateHelper.OpenSession("ConnectionName1"))
{
Course courseAlias = null;
SimpleExpression e1 = Restrictions.Ge(Projections.Count(Projections.Property(() => courseAlias.CourseID)), 2);
SimpleExpression e2 = Restrictions.Ge(Projections.Count(Projections.Property(() => courseAlias.CourseID)), 3);
var results2 = session.QueryOver<Course>(() => courseAlias)
.Where(e1||e2)
.SelectList(list => list
.SelectGroup(x => x.DepartmentID).WithAlias(() => courseAlias.DepartmentID)
.SelectCount(x => x.CourseID).WithAlias(() => courseAlias.CourseID)
).TransformUsing(Transformers.AliasToBean<Course>()).List<Course>();
}
答案 0 :(得分:0)
看起来像这样
Course courseAlias = null;
var query = session.QueryOver<Course>(() => courseAlias)
.SelectList(l => l
.SelectGroup(item => item.DepartmentID).WithAlias( () => courseAlias.DepartmentID)
.SelectCount(item => item.StatusID).WithAlias(() => courseAlias.StatusID)
)
// WHERE Clause
.Where(item => item.DepartmentID > 1)
// HAVING Clause
.Where( Restrictions.In(
Projections.Count<Course>(item => item.StatusID)
, new List<int> {2, 3})
)
.TransformUsing(Transformers.AliasToBean<Course>())
var list = query
// take skip...
.List<Course>();