2009-08-03 1 views
7

Любой знает, как использовать Projections.Conditional, чтобы произвести что-то вроде «случай ... когда ...»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' 

Каков правильный способ использования прогнозов.

+0

Я думаю, что это ошибка. Я тоже пробовал всевозможные способы, и порядок параметров запутан. Какую версию 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 правильно. И кажется, что вы уже сообщили об этом как об ошибке для NH Jira? – asgerhallas

+1

Проблема (NH1911) теперь отмечена как исправленная в версии 2.1.1.GA. Попробуйте проверить это. – asgerhallas