Nhibernate 将条件投影转换为布尔投影
在我的查询中有一个简单的case语句,它本质上表示如果子查询的计数为1,则返回false,否则返回true。NHibernate生成的查询是正确的,但是我很难获得case语句的布尔返回值,以转换为dto 这是我的限制Nhibernate 将条件投影转换为布尔投影,nhibernate,Nhibernate,在我的查询中有一个简单的case语句,它本质上表示如果子查询的计数为1,则返回false,否则返回true。NHibernate生成的查询是正确的,但是我很难获得case语句的布尔返回值,以转换为dto 这是我的限制 var restriction = Restrictions.Eq(Projections.SubQuery(QueryOver.Of(() => alias) .Select(Projections.Count(() => alias.Id)) .Wh
var restriction = Restrictions.Eq(Projections.SubQuery(QueryOver.Of(() => alias)
.Select(Projections.Count(() => alias.Id))
.Where(x => x.AddedBy == UserProvider.Current.UserName)
.Where(() => alias.Item.Id == alias2.Id)), 1);
这是我的预测
.Add(
Projections.Conditional(restriction,
Projections.Cast(NHibernateUtil.YesNo, Projections.Constant(false)),
Projections.Cast(NHibernateUtil.YesNo, Projections.Constant(true))))
.WithAlias(() => dto.CanApply))
)
这里,我的dto中的CanApply
属性是一个布尔值。我收到的错误是{“无法将System.Int32类型分配给System.Boolean setter of Dto.CanApp”}
类型的属性
我已经尝试了我所能想到的一切,试图让NHibernate将整数转换为布尔值
我错过了什么
编辑
通过继承IResultTransformer
并检查每个别名以确定它是否是导致问题的别名,我可以通过创建自定义结果转换器来解决此问题。一旦我找到了罪犯的别名,我只需发出一个Convert.ToBoolean(tupleValue)
就可以了
有人能确认我是在重新发明轮子,还是NHibernate有一个我做这件事时没有的内置机制吗?尝试在Projections.Constant中指定类型。像这样:
.Add(
Projections.Conditional(restriction,
Projections.Constant(false, NHibernateUtil.Boolean)),
Projections.Constant(true, NHibernateUtil.Boolean))))
.WithAlias(() => dto.CanApply))
)