【问题标题】:Nhibernate union of queries查询的休眠联合
【发布时间】:2014-05-22 11:39:28
【问题描述】:
我对 Nhibernate 很陌生,所以这听起来很傻。
我有一个函数,它根据我需要进行查询来接收参数:
Public List<Data> GetResultData(SearchParams[] searchparams) {}
在这种情况下,SearchParams 是我的类,它的属性很少,比如 ID 和 Name 将用于查询。
所以这是我面临的两个挑战:
-
我需要仅对已归档的SearchParams 的属性进行查询。说searchParams数组的一个对象是这样的:
ID, NAME
"34", ""
正如我们所见,NAME 没有价值。所以我的查询需要是这样的:
select * from DB where ID ="34".
必须在运行时根据可用值创建查询。如果这两个属性都可用,那么它将是两者的AND。
由于输入是搜索参数数组,因此查询的数量与对象的数量一样多。我正在尝试一种方法,使我可以对所有这些查询进行 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);