gpt4 book ai didi

nhibernate - Projections.Conditional - 如何使用它?

转载 作者:行者123 更新时间:2023-12-04 12:50:07 28 4
gpt4 key购买 nike

任何人都知道如何使用 Projections.Conditional 来产生诸如“case ... when ...”之类的东西

以下代码给出了错误的查询:

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 的正确方法是什么?

最佳答案

更新:该问题 (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

关于nhibernate - Projections.Conditional - 如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1222735/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com