NHIbernate ICriteria条件分离

时间:2011-06-17 14:21:03

标签: nhibernate conditional criteria

我有一个有效的标准,但我想让我的方法更灵活。

我的标准之一如下:

    .Add(
        nhc.Restrictions.In("GroupID", groupIDs)
        || nhc.Restrictions.Eq("UserIDScheduled", userID));

但我需要做的是检查groupIDs& userID params在添加它们之前实际上有值,否则我会得到意想不到的结果/查询。例如,如果我想获取GroupID在x,y,z中的实体,但是如果它为null则不包括OR中的用户ID。

我可以有一个3案例的IF语句来做到这一点,但似乎应该有另一种方式来实现它吗? (如果userID == null,只有.Add(.. In(GroupID)..),如果groupIDs == null,等等。)

我显然不太熟悉ICriteria API,所以我不确定它的功能是什么。

1 个答案:

答案 0 :(得分:1)

您可以像这样使用Disjunction:

var disjunction = new Disjunction();

if (userId != null)
    disjunction.Add(Restrictions.Eq("UserIDScheduled", userID));
if (groupIDs != null)
    disjunction.Add(Restrictions.In("GroupID", groupIDs));

criteria.Add(disjunction);