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