如何选择nHibernate子查询结果的Count(*)
时间:2020-03-06 14:33:07 来源:igfitidea点击:
为了在nHibernate中分页查询,我需要执行以下操作:
Select count(*) from (Select e.ID,e.Name from Object as e where...)
我尝试了以下方法,
select count(*) from Object e where e = (Select distinct e.ID,e.Name from ...)
我得到一个nHibernate异常,说我不能将Object转换为int32.
对所需语法有任何想法吗?
编辑
子查询使用了distinct子句,我无法用" Count()"替换e.ID,e.Name,因为" Count()distant"不是有效的语法,而" distinct count(*)"则毫无意义。
解决方案
我们是否需要e.Id,e.Name?
做就是了
从对象的位置选择count(*)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这是我如何做的草稿:
询问:
public IList GetOrders(int pageindex, int pagesize) { IList results = session.CreateMultiQuery() .Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize)) .Add(session.CreateQuery("select count(*) from Orders o")) .List(); return results; }
ObjectDataSource:
[DataObjectMethod(DataObjectMethodType.Select)] public DataTable GetOrders(int startRowIndex, int maximumRows) { IList result = dao.GetOrders(startRowIndex, maximumRows); _count = Convert.ToInt32(((IList)result[1])[0]); return DataTableFromIList((IList)result[0]); //Basically creates a DataTable from the IList of Orders }
通过修改Geir-Tore的答案解决了我自己的问题。
IList results = session.CreateMultiQuery() .Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize)) .Add(session.CreateQuery("select count(distinct e.Id) from Orders o where...")) .List(); return results;
var session = GetSession(); var criteria = session.CreateCriteria(typeof(Order)) .Add(Restrictions.Eq("Product", product)) .SetProjection(Projections.CountDistinct("Price")); return (int) criteria.UniqueResult();
我更喜欢,
public IList GetOrders(int pageindex, int pagesize, out int total) { var results = session.CreateQuery().Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize)); var wCriteriaCount = (ICriteria)results.Clone()); wCriteriaCount.SetProjection(Projections.RowCount()); total = Convert.ToInt32(wCriteriaCount.UniqueResult()); return results.List(); }