sql - otro - subconsultas base de datos
¿Cómo selecciono el recuento(*) de los resultados de una subconsulta nHibernate? (6)
¿Necesitas e.Id, e.Name?
solo haz
seleccionar conteo (*) desde Objeto donde .....
Necesito hacer lo siguiente a los efectos de buscar una consulta en nHibernate:
Select count(*) from
(Select e.ID,e.Name from Object as e where...)
He probado lo siguiente,
select count(*) from Object e where e = (Select distinct e.ID,e.Name from ...)
y recibo una excepción nHibernate que dice que no puedo convertir Object a int32.
¿Alguna idea sobre la sintaxis requerida?
EDITAR
La subconsulta usa una cláusula distinta, no puedo reemplazar el e.ID, e.Name con Count(*)
porque Count(*) distinct
no es una sintaxis válida, y el distinct count(*)
tiene sentido.
Aquí hay un borrador de cómo lo hago:
Consulta:
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
}
Resolvió mi propia pregunta modificando la respuesta de 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();
Yo prefiero,
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 permite la consulta Linq.
Prueba esto
int count = session.QueryOver<Orders>().RowCount();