2009-08-03 11 views
7

Każdy wie, jak korzystać Projections.Conditional aby stworzyć coś w rodzaju „przypadku ... kiedy ...”Projekcje. Warunkowe - jak z niego korzystać?

Poniższy kod daje zły zapytanie:

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

Wytworzona stwierdzenie jest niekompletny i kolejność parametrów jest błędna.

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' 

jaki jest prawidłowy sposób korzystania z Projections.Conditional?

+0

ja sądzę, że to błąd. Próbowałem również na wiele sposobów, a kolejność parametrów jest splątana. Jaką wersję NH używasz? – asgerhallas

Odpowiedz

2

AKTUALIZACJA: Wydanie (NH1911) jest teraz oznaczone jako poprawione w wersji 2.1.1.GA. Spróbuj to sprawdzić!


Wygląda na to, że używa się razem nazwanych i pozycyjnych parametrów. Wydaje się być to błąd, ponieważ trzeba zawarły też:

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

Projections.Constant wykorzystuje pozycyjne i Restriction.Eq używa nazwanych parametrów. Że bałagan kolejność jak kasowych opisano tutaj, choć kwestia ta powinna zostać ustalona:

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

+0

Wygląda na to, że NH-1098 nie rozwiązuje mojego problemu. Używamy wersji 2.1.0 GA. – Caro

+1

Ok. Ale starałem się powiedzieć, że był to problem przez jakiś czas i nie został naprawiony we wcześniejszych wersjach - i używasz Projections.Conditional. I wydaje się, że już zgłosiłeś to jako błąd do NH Jira? – asgerhallas

+1

Problem (NH1911) jest teraz oznaczony jako poprawiony w wersji 2.1.1.GA. Spróbuj to sprawdzić. – asgerhallas

Powiązane problemy