Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 将条件投影转换为布尔投影_Nhibernate - Fatal编程技术网

Nhibernate 将条件投影转换为布尔投影

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

在我的查询中有一个简单的case语句,它本质上表示如果子查询的计数为1,则返回false,否则返回true。NHibernate生成的查询是正确的,但是我很难获得case语句的布尔返回值,以转换为dto

这是我的限制

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))
 )