2009-08-03 2 views
7

Jeder weiß, wie Projections.Conditional zu nutzen, um etwas wie zu produzieren „Fall ... wenn ...“Projections.Conditional - Wie benutzt man es?

Der folgende Code eine falsche Abfrage ergibt:

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

Die erzeugte Erklärung unvollständig ist und die Reihenfolge der Parameter ist falsch.

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' 

Was ist der richtige Weg, Projektionen zu verwenden.Zusätzlich?

+0

glaube ich ist es ein Bug. Ich habe es auf alle möglichen Arten versucht, und die Reihenfolge der Parameter ist verwickelt. Welche Version von NH verwenden Sie? – asgerhallas

Antwort

2

UPDATE: Die Frage (NH1911) gekennzeichnet ist jetzt wie in Version 2.1.1.GA. fixiert Probieren Sie es aus!


Es scheint, zusammen, um die Verwendung von benannten und Positionsparameter zu sein. Es scheint ein Fehler zu sein, wie Sie auch geschlossen haben müssen:

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

Projections.Constant verwendet Positions- und die Restriction.Eq verwendet benannte Parameter. Das vermasselt den Auftrag wie hier desribed, obwohl dieses Problem behoben werden soll:

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

+0

NH-1098 scheint mein Problem nicht zu lösen. Wir verwenden Version 2.1.0 GA. – Caro

+1

Ok. Aber was ich versucht habe zu sagen, war, dass es ein Problem war und nicht in früheren Versionen behoben wurde - und Sie verwenden Projections.Conditional korrekt. Und es scheint, dass Sie es bereits als ein Bug zum NH Jira gemeldet haben? – asgerhallas

+1

Das Problem (NH1911) ist jetzt in Version 2.1.1.GA als behoben markiert. Versuchen Sie es zu überprüfen. – asgerhallas