我正在寻找一个不会对标准添加限制的 NHibernate 标准。这样做的原因是我有一个方法可以将一些输入参数转换为添加到标准的标准。有一组输入参数,不需要应用任何限制。因此,我想返回某种虚拟标准。
NHibernate 中有类似的东西吗?
最好的问候,
奥利弗·哈纳皮
我正在寻找一个不会对标准添加限制的 NHibernate 标准。这样做的原因是我有一个方法可以将一些输入参数转换为添加到标准的标准。有一组输入参数,不需要应用任何限制。因此,我想返回某种虚拟标准。
NHibernate 中有类似的东西吗?
最好的问候,
奥利弗·哈纳皮
您可以使用始终为真的空联结(它解析为“1 = 1”)。
例如。
ICriterion conditionalCriteria = includeCriteria
? Restrictions.Eq("someEntity.Field", variable)
: (ICriterion) Restrictions.Conjuction();
var query = Session
.CreateCriteria<SomeEntity>("someEntity")
.Add(conditionalCriteria)
.SetResultTransformer(Transformers.AliasToBean<SomeEntity>())
.List<SomeEntity>();
好吧,如果查询以“id”为主键的实体(因此永远不能为空),您可以执行类似 Restrictions.IsNotNull("id") 的操作。任何评估为没有逻辑限制的东西都可以根据您的要求使用。
您可以根据需要添加条件,因此只需检查您的参数是否为空,如果它们不为空,则添加条件。参见示例:
Criteria cr = session.createCriteria(Employee.class)
cr.add(Restrictions.like("firstName", "Bob%"));
if (par_salary.IsNotNullOrEmpty())
{
cr.add(Restrictions.eq("salary", par_salary));
}
List results = cr.list();