Nhibernate查询并集

Nhibernate查询并集,nhibernate,nhibernate-criteria,queryover,Nhibernate,Nhibernate Criteria,Queryover,我对Nhibernate很陌生,所以这听起来可能很傻 我有一个函数,它根据我进行查询所需的内容接收参数: Public List<Data> GetResultData(SearchParams[] searchparams) {} 正如我们所看到的,名称没有值。因此,我的查询需要如下所示: select * from DB where ID ="34". 必须在运行时根据可用值创建查询。如果这两个属性都可用,则它将是这两个属性的和 由于输入是一个搜索参数数组,因此查询的数量与对

我对Nhibernate很陌生,所以这听起来可能很傻

我有一个函数,它根据我进行查询所需的内容接收参数:

Public List<Data> GetResultData(SearchParams[] searchparams) {}
正如我们所看到的,
名称
没有值。因此,我的查询需要如下所示:

select * from DB where ID ="34".
必须在运行时根据可用值创建查询。如果这两个属性都可用,则它将是这两个属性的

  • 由于输入是一个搜索参数数组,因此查询的数量与对象的数量相同。我正试图想出一种方法,将所有这些问题结合起来,一次就解决掉


  • 思想?

    一系列与分离相关的限制,称为分离。与和相联系的一系列限制称为连词

    所以,你需要的是

    一个连词表示你的第三个条件 连接第一、第二和第三个条件的一个析取: 下面是:

    Criterion startInRange = Restrictions.between("expectedStartCanonicDate", rangeStart, rangeEnd);
    
    Criterion endInRange = Restrictions.between("expectedCompletionCanonicDate", rangeStart, rangeEnd);
    
    Criterion thirdCondition = 
        Restrictions.conjunction().add(Restrictions.le("expectedStartCanonicDate", rangeStart))
                                  .add(Restrictions.ge("expectedCompletionCanonicDate", rangeEnd));
    
    Criterion completeCondition = 
        Restrictions.disjunction().add(startInRange)
                                  .add(endInRange)
                                  .add(thirdCondition);
    
    criteria.add(completeCondition);
    
    Criterion startInRange = Restrictions.between("expectedStartCanonicDate", rangeStart, rangeEnd);
    
    Criterion endInRange = Restrictions.between("expectedCompletionCanonicDate", rangeStart, rangeEnd);
    
    Criterion thirdCondition = 
        Restrictions.conjunction().add(Restrictions.le("expectedStartCanonicDate", rangeStart))
                                  .add(Restrictions.ge("expectedCompletionCanonicDate", rangeEnd));
    
    Criterion completeCondition = 
        Restrictions.disjunction().add(startInRange)
                                  .add(endInRange)
                                  .add(thirdCondition);
    
    criteria.add(completeCondition);