sql-server – 将投影添加到NHibernate标准会阻止它执行默认实体
发布时间:2020-12-12 06:34:01 所属栏目:MsSql教程 来源:网络整理
导读:我正在写一个NHibernate标准,选择支持分页的数据.我正在使用SQL Server 2005()中的COUNT(*)OVER()表达式来获取可用行的总数,如Ayende Rahien的 suggested.我需要这个数字才能计算出总共有多少页.这个解决方案的优点是我不需要执行第二个查询来获取行数. 但是,
我正在写一个NHibernate标准,选择支持分页的数据.我正在使用SQL Server 2005()中的COUNT(*)OVER()表达式来获取可用行的总数,如Ayende Rahien的
suggested.我需要这个数字才能计算出总共有多少页.这个解决方案的优点是我不需要执行第二个查询来获取行数.
但是,我似乎无法设法编写工作标准(Ayende只提供HQL查询). 这是一个SQL查询,显示我想要的东西,它工作得很好.请注意,我故意省略了实际的分页逻辑以关注问题: SELECT Items.*,COUNT(*) OVER() AS rowcount FROM Items 这是HQL: select item,rowcount() from Item item 请注意,rowcount()函数在自定义NHibernate方言中注册,并在SQL中解析为COUNT(*)OVER(). 要求是使用条件表达查询.不幸的是,我不知道如何做对: var query = Session .CreateCriteria<Item>("item") .SetProjection( Projections.SqlFunction("rowcount",NHibernateUtil.Int32)); 每当我添加投影时,NHibernate都不会选择项目(就像没有投影一样),只需要rowcount(),而我真的需要两者.此外,我似乎无法将项目作为一个整体,只有它的属性,我真的不想列出所有这些. 我希望有人能解决这个问题.不管怎么说,还是要谢谢你. 解决方法我认为在Criteria中不可能,它有一些限制.您可以在后续查询中获取id并加载项: var query = Session .CreateCriteria<Item>("item") .SetProjection(Projections.ProjectionList() .Add(Projections.SqlFunction("rowcount",NHibernateUtil.Int32)) .Add(Projections.Id())); 如果您不喜欢它,使用HQL,您也可以设置最大结果数: IList<Item> result = Session .CreateQuery("select item,rowcount() from item where ..." ) .SetMaxResult(100) .List<Item>(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |