2009-08-03 17 views
7

Cualquiera sabe cómo utilizar Projections.Conditional para producir algo así como "caso ... cuando ..."Proyecciones.Condicional - ¿Cómo usarlo?

El siguiente código da una consulta equivocada:

IProjection isError = Projections.Conditional(Expression.Eq("event.LogLevel", eLogLevel.Fatal.ToString()), Projections.Constant(1), Projections.Constant(0)); 

ICriteria criteria = Session.CreateCriteria(typeof(LogEvent), "event") 
    .Add(Restrictions.Eq("event.ApplID", "LogEventViewer")) 
    .SetProjection(Projections.ProjectionList() 
    .Add(Projections.GroupProperty("event.ApplID")) 
    .Add(Projections.RowCount(), "TotalCount") 
    .Add(Projections.Sum(isError), "ErrorCount") 
); 

La declaración se produce es incompleta y la el orden de los parámetros es incorrecto

exec sp_executesql N' 
    SELECT this_.strApplID as y0_ 
    , count(distinct this_.lngLogEventID) as y1_ 
    , sum((case when this_.strLogLevel = ? then ? else ? end)) as y2_ 
    , this_.strApplID as y3_ 
    FROM qryLogEvent this_ 
    WHERE this_.strApplID = @p0 
    GROUP BY this_.strApplID' 
,N'@p0 nvarchar(5),@p1 int,@p2 int,@p3 nvarchar(14)' 
,@p0=N'Fatal',@p1=1,@p2=0,@p3=N'LogEventViewer' 

cuál es la manera correcta de utilizar Projections.Conditional?

+0

yo creo que es un error. Lo he intentado de muchas maneras también, y el orden de los parámetros está enredado. ¿Qué versión de NH estás usando? – asgerhallas

Respuesta

2

ACTUALIZACIÓN: El problema (NH1911) ahora está marcado como arreglado en la versión 2.1.1.GA. ¡Prueba verificar uno!


parece ser el uso de parámetros con nombre y posicionales juntos. Parece ser un error, ya que debe haber concluido también:

https://nhibernate.jira.com/browse/NH-1911

Projections.Constant utiliza posicional y la Restriction.Eq utiliza parámetros con nombre. Esa meta la pata de la orden como desribed aquí, aunque esta cuestión debería haber sido corregido:

https://forum.hibernate.org/viewtopic.php?f=25&t=985944&start=0

+0

NH-1098 parece que no resuelve mi problema. Usamos la versión 2.1.0 GA. – Caro

+1

Ok. Pero lo que traté de decir es que ha sido un problema por un tiempo, y que no fue corregido en versiones anteriores, y está usando Projections.Conditional correct. ¿Y parece que ya lo has informado como un error para el NH Jira? – asgerhallas

+1

El problema (NH1911) ahora está marcado como arreglado en la versión 2.1.1.GA. Intenta verificarlo. – asgerhallas

Cuestiones relacionadas