【问题标题】:Nhibernate union of queries查询的休眠联合
【发布时间】:2014-05-22 11:39:28
【问题描述】:

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

我有一个函数,它根据我需要进行查询来接收参数:

Public List<Data> GetResultData(SearchParams[] searchparams) {}

在这种情况下,SearchParams 是我的类,它的属性很少,比如 IDName 将用于查询。

所以这是我面临的两个挑战:

  1. 我需要对已归档的SearchParams 的属性进行查询。说searchParams数组的一个对象是这样的:

    ID,  NAME 
    "34", ""
    

    正如我们所见,NAME 没有价值。所以我的查询需要是这样的:

    select * from DB where ID ="34".
    

    必须在运行时根据可用值创建查询。如果这两个属性都可用,那么它将是两者的AND

  2. 由于输入是搜索参数数组,因此查询的数量与对象的数量一样多。我正在尝试一种方法,使我可以对所有这些查询进行 UNION 并一次性触发它们。

想法?

【问题讨论】:

    标签: nhibernate nhibernate-criteria queryover


    【解决方案1】:

    与或链接的一系列限制称为析取。与 and 相关联的一系列限制称为连词。

    所以,你需要的是

    第三个条件的一个连词 连接第一个、第二个和第三个条件的一个析取: 就这样吧:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2016-11-06
      • 1970-01-01
      • 2011-08-09
      相关资源
      最近更新 更多