如何选择一个NHibernate的子查询的结果
的COUNT(*)我需要做寻呼NHibernate的查询的用途如下:如何选择一个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。
关于所需语法的任何想法?
编辑
子查询使用不同的条款,我不能因为Count(*)
是Count(*) distinct
不是一个有效的语法替换e.ID,e.Name和distinct count(*)
是没有意义的。
您是否需要e.Id,e.Name?
只是做的对象,其中
SELECT COUNT(*)......
对不起,我忘了补充规定,该子查询是不同的。 – ForCripeSake 2008-09-22 17:42:33
下面是我如何做一个草稿:
查询:
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
}
该问题源于这样一个事实,即我需要第一个查询的不同结果的Count(*),因为查询中的count(*)不会生成相同的数字(3个结果与54个结果由于多个联接而产生)。 ) – ForCripeSake 2008-09-22 20:33:09
啊,对。对不起,我错过了 – 2008-09-23 01:26:01
通过修改吉尔 - 托雷的回答解决了我自己的问题.....
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();
}
NHibernate的3.0允许Linq查询。
试试这个
int count = session.QueryOver<Orders>().RowCount();
看来,我们需要看到的应用程序/ C#代码调用返回后 – 2008-09-22 17:57:33