首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Projections.Conditional -如何使用它?

Projections.Conditional -如何使用它?
EN

Stack Overflow用户
提问于 2009-08-03 14:43:34
回答 1查看 3.5K关注 0票数 7

任何人都知道如何使用Projections.Conditional生成类似于"case .when.“之类的东西。

以下代码提供了错误的查询:

代码语言:javascript
复制
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" )
  );

所产生的语句是不完整的,参数的顺序是错误的。

代码语言:javascript
复制
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的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2009-08-05 07:40:32

更新:这个问题(NH1911)现在在2.1.1.GA版本中被标记为修复了。

它似乎是命名参数和位置参数的结合使用。它似乎确实是一个bug,正如您所得出的结论:

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

Projections.Constant使用位置,Restriction.Eq使用命名参数。这扰乱了这里的命令,尽管这个问题应该已经解决了:

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1222735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档