2009-08-03 32 views
7

Chiunque sa usare Projections.Conditional a produrre qualcosa come "caso ... quando ..."Proiezioni.Conditional - Come si usa?

Il seguente codice dà una query sbagliato:

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 dichiarazione prodotta è incompleta e la l'ordine dei parametri è sbagliato.

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' 

qual è il modo corretto di utilizzare Proiezioni.Conditional?

+0

Io credo che sia un bug. Ho provato anche in tutti i modi, e l'ordine dei parametri è aggrovigliato. Quale versione di NH stai usando? – asgerhallas

risposta

2

AGGIORNAMENTO: Il problema (NH1911) è ora contrassegnato come risolto nella versione 2.1.1.GA. Prova a controllarne uno!


sembra essere l'utilizzo di parametri denominati e posizionali insieme. Sembra essere un bug, come è necessario aver concluso troppo:

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

Projections.Constant utilizza posizionale e il Restriction.Eq utilizza parametri denominati. Che scombina l'ordine come desribed qui, anche se questo problema dovrebbe essere stato risolto:

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

+0

NH-1098 sembra non risolvere il mio problema. Usiamo la versione 2.1.0 GA. – Caro

+1

Ok. Ma quello che ho cercato di dire è che è stato un problema per un po ', e non è stato risolto nelle versioni precedenti - e stai usando Proiezioni. E sembra che tu l'abbia già segnalato come un insetto all'NH Jira? – asgerhallas

+1

Il problema (NH1911) è ora contrassegnato come risolto nella versione 2.1.1.GA. Prova a controllarne uno. – asgerhallas