如何使用Nhibernate进行条件求和?
我正在尝试相当于这个SQL代码
SELECT ID SUM(CASE WHEN myProperty = 2 THEN 1 ELSE 0 END) as nbRowWithValueOf2, SUM(CASE WHEN myProperty = 3 THEN 1 ELSE 0 END) as nbRowWithValueOf3 FROM Foo GROUP BY ID
有了Nhibernate。
到目前为止我试过了
queryable = queryable .Select( Projections.Group(c => c.ID), Projections.Sum(c => c.myProperty == MyEnum.Two ? 1 : 0) Projections.Sum(c => c.myProperty == MyEnum.Three ? 1 : 0) )
但这给了我以下错误:
无法从IIF确定成员((转换(c.myProperty)= 2),1,0)
你有什么主意吗 ?
编辑1:我可以通过2个查询获得结果但我只想在1个查询中执行此操作。
编辑2:我在这里使用QueryOver。
我认为这应该工作(QueryOver语法):
queryover = queryover .Select( Projections.Group(c => c.ID), Projections.Sum( Projections.Conditional( Restrictions.Where (f => f.myProperty == MyEnum.Two), Projections.Constant(1), Projections.Constant(0))), Projections.Sum( Projections.Conditional( Restrictions.Where (f => f.myProperty == MyEnum.Three), Projections.Constant(1), Projections.Constant(0))));
哪个应该给你以下SQL:
SELECT this_.ID as y0_, sum((case when this_.myProperty = 2 /* @p0 */ then 1 /* @p1 */ else 0 /* @p2 */ end)) as y1_, sum((case when this_.myProperty = 3 /* @p3 */ then 1 /* @p4 */ else 0 /* @p5 */ end)) as y2_ FROM [Foo] this_ GROUP BY this_.ID