0

在我的项目中,我尝试建立这样的标准:

ICriteria criteria = session.CreateCriteria(typeof(Orders), typeof(Orders).Name);

if (param != null)
{                       
    if (param[1] != "System")
    {
        for (int index = 0; index < param.Length - 1; index++)
        {
            if (!string.IsNullOrEmpty(param[index]))
            {                                
                criteria.Add(Expression.Eq(
                    "RealizationPoint", 
                    CommonUtils.GetNameRealizationPointById(param[index])));
            }
        }
    }
    if (param[1] != "System" && param2 != null && 
        !string.IsNullOrEmpty(param2[0]))
    {
        for (int index = 0; index < param2.Length - 1; index++)
        {
            if (!string.IsNullOrEmpty(param2[index]))
            {
                criteria.Add(Expression.Eq(
                    "RealizationPoint", 
                    CommonUtils.GetNameRealizationPointById(param2[index])));
            }
        }
     }
 }

参数 1,参数 2:字符串 [] 参数 1,字符串 [] 参数 2。在表达式保持 AND 之间的结果中,我需要 OR。

4

1 回答 1

1

您可以使用Restrictions.Disjunction()将多个表达式分组为 OR 和Restrictions.Conjuctions()AND。

简化示例:

var conjunction1 = Restrictions.Conjunction();
for (int index = 0; index < param.Length -1; index++)
{
    conjunction1.Add(Restrictions.Eq("RealizationPoint", param[index]));
}

var conjunction2 = Restrictions.Conjunction();
for (int index = 0; index < param2.Length -1; index++)
{
    conjunction2.Add(Restrictions.Eq("RealizationPoint", param2[index]));
}

criteria.Add(Restrictions.Disjunction().Add(conjunction1).Add(conjunction2));

// Or with Restrictions.Or()
// criteria.Add(Restrictions.Or(conjunction1, conjunction2));

您可以在这个 SO 问题中找到更多信息和替代方法:如何为 NHibernate 创建 OR 语句?

于 2012-09-13T10:39:17.517 回答