tipos subconsultas otro inner ejemplos doble dentro datos consultas concatenar anidadas sql nhibernate subquery

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();