Estoy tratando de obtener un recuento de una consulta con un grupo y no puedo encontrar la manera de traducir el SQL que quiero en la sintaxis QueryOver de NHibernate.NHibernate QueryOver: Obtenga un recuento de filas con group by en una subconsulta
Este es el SQL:
select count(*) from
(select Email from Entry
where (conditions...)
group by Email) as tmp
parece sencillo ¿verdad?
Ésta es la forma en que estoy tratando de hacerlo, pero el() llamada RowCount parece optimizar el grupo de desaparecer por completo:
var query = _unitOfWork.CurrentSession.QueryOver<ContestEntry>()
.Select(Projections.Property<ContestEntry>(x => x.Email),
Projections.Group<ContestEntry>(x => x.Email));
return query.RowCount();
no me importaría mediante los criterios para esto, pero me Estoy emocionado con la nueva (para mí) API QueryOver que me permite alejarme de las cadenas mágicas.
Actualización:
Soy incapaz de utilizar SQL generado que hace una consulta distinta dentro de una cuenta (por ejemplo, seleccionar la cuenta (distinto de correo electrónico)) ya que esta aplicación se ejecuta en SQL CE.
Ver: http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/80a1d7dd-22be-4583-b8f2-fcd8cde5ec53/ y http://our.umbraco.org/wiki/install-and-setup/sql-server-ce-4-known-issues ("Distinto en el recuento no es compatible", alrededor de 2/3 del camino hacia abajo de la página)
Gracias Alex, tienes razón; esto funciona correctamente en SQL Server (y presumiblemente en otras bases de datos). Sin embargo, la aplicación en la que se ejecuta esto también usa SQL CE en algunas instancias y, por cualquier razón, SQL CE no admite el conteo de selecciones (distintas x). Consulte http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/80a1d7dd-22be-4583-b8f2-fcd8cde5ec53/ y http://our.umbraco.org/wiki/install-and- setup/sql-server-ce-4-known-issues – mmacaulay
Marqué esta como la respuesta correcta, porque técnicamente lo es, siempre que use SQL Server. Para SQL CE, tuve que usar SQL en línea para que funcione. – mmacaulay