2009-08-03 7 views
7

誰かがProjections.Conditionalを使って "case ... when ..."のようにする方法を知っています。Projections.Conditional - それを使用する方法?

次のコードは間違ったクエリを示します:

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

生成されたステートメントは不完全であり、のパラメータが間違っています。

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' 

Projections.Conditionalを使う正しい方法は何ですか?

+0

:それは、この問題が修正されている必要がありますが、ここではdesribedとして順序を台無しに。私はあらゆる種類の方法で試してみました。パラメータの順序は絡み合っています。どのNHのバージョンを使用していますか? – asgerhallas

答えて

2

更新:問題(NH1911)は、バージョン2.1.1.GAで修正済みとマークされました。それをチェックしてみてください!

名前付きパラメーターと位置パラメーターを一緒に使用しているようです。あなたも締結している必要がありますように、バグのように見えるん:

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

Projections.Constantは、位置使用し、Restriction.Eqは、名前付きパラメータを使用しています。私はそれはバグだと思います

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

+0

NH-1098は私の問題を解決していないようです。バージョン2.1.0 GAを使用します。 – Caro

+1

しかし、私が言ったことは、それが以前のバージョンでは修正されていないし、Projections.Conditional correctを使用している間に問題となっていたことでした。そして、あなたはすでにNH Jiraのバグとしてそれを報告しているようですね? – asgerhallas

+1

問題(NH1911)はバージョン2.1.1.GAで修正済みとマークされました。それをチェックしてみてください。 – asgerhallas

関連する問題