Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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
使用带有in子句的子字符串投影的NHibernate标准_Nhibernate_Criteria_Projection_Criteria Api - Fatal编程技术网

使用带有in子句的子字符串投影的NHibernate标准

使用带有in子句的子字符串投影的NHibernate标准,nhibernate,criteria,projection,criteria-api,Nhibernate,Criteria,Projection,Criteria Api,我在Oracle中有一个场景,需要将列的子字符串部分与值列表相匹配。我使用sqlfunction投影在所需列上应用子字符串,并将该投影添加为In子句限制的一部分。下面是我为此编写的简化标准 ICriteria criteriaQuery = session.CreateCriteria<Meeting>() .Add(Restrictions.In( Projections.SqlFunction( "substring",

我在Oracle中有一个场景,需要将列的子字符串部分与值列表相匹配。我使用sqlfunction投影在所需列上应用子字符串,并将该投影添加为In子句限制的一部分。下面是我为此编写的简化标准

ICriteria criteriaQuery = session.CreateCriteria<Meeting>()
    .Add(Restrictions.In(
        Projections.SqlFunction(
            "substring",
            NHibernateUtil.String,
            Projections.Property("Code"),
            Projections.Constant(1),
            Projections.Constant(3)),
        new string[] { "D01", "D02" }))
        .Add(Restrictions.In("TypeId", meetingTypes));
p2和p3再次生成,并且是p0和p1的重复项,因为整个查询失败

我可以通过用公式映射一个新属性来暂时解决这个问题,但我认为这不是正确的方法,因为即使我不需要计算子字符串,公式也会一直执行


关于投影与In子句组合使用时是否正常工作的任何建议,当我使用Equal Restriction而不是In时,相同的投影正常工作。

此错误在3.0.0.GA版本中已修复

您使用的是什么版本的NHibernate?我在NH和oracle中也有类似的场景,但它在2.1中得到了修复。我确实在他们的Jira网站上发现了一个bug:你也可以在freenode的IRC上询问他们,地址是##nhibernate。同样的问题似乎也发生在LEFT()上。你知道问题跟踪者ID吗?我仍然在3.2.0GA中看到这个问题。@Nathan Baulch-抱歉,没有。我刚刚用3.0.0.GA测试了我的声明,它起了作用。好的,这一定是3.2中的回归。我已经创建了一个单元测试,并将其提交给问题跟踪器:
SELECT this_.Meeting_id as Meeting1_0_2_, .....  
WHERE substr(this_.Mcs_Main, :p0, :p1) in (:p2, :p3) 
and this_.Meeting_Type_Id in (:p4, :p5);
:p0 = 1, :p1 = 3, :p2 = 1, :p3 = 3, :p4 = 'D02', :p5 = 'D03', :p6 = 101, :p7 = 102