C# 有条件地增加限制

C# 有条件地增加限制,c#,nhibernate,C#,Nhibernate,我有非常复杂的标准。让我们看看以下标准: new List < ICriterion > { Restrictions.Not(Restrictions.Eq("Name", user.Name)), Restrictions.Or( Restrictions.And( Restrictions.And(

我有非常复杂的标准。让我们看看以下标准:

         new List < ICriterion > {
            Restrictions.Not(Restrictions.Eq("Name", user.Name)),
            Restrictions.Or(
               Restrictions.And(
                  Restrictions.And(                 
                     Restrictions.Eq("Status", user.Status))
                     ...
                ))
                ...
         };
新列表{
Restrictions.Not(Restrictions.Eq(“Name”,user.Name)),
限制。或(
限制。及(
限制。及(
限制.Eq(“状态”,用户状态))
...
))
...
};
但我需要根据一个设置有条件地添加一个限制

    if(Setting.SomeSettings)
        {
           new List < ICriterion > {
                    Restrictions.Not(Restrictions.Eq("Name", user.Name)),
                    Restrictions.Or(
                       Restrictions.And(
                          Restrictions.And(
                            **//new restriction**
                             Restrictions.Eq("Some", user.Some))
                             Restrictions.Eq("Status", user.Status))
                             ...
                        ))
                        ...
                 };
        }
        else
        {
           new List < ICriterion > {
                    Restrictions.Not(Restrictions.Eq("Name", user.Name)),
                    Restrictions.Or(
                       Restrictions.And(
                          Restrictions.And(                 
                             Restrictions.Eq("Status", user.Status))
                             ...
                        ))
                        ...
                 };
        }
if(Setting.SomeSettings)
{
新列表{
Restrictions.Not(Restrictions.Eq(“Name”,user.Name)),
限制。或(
限制。及(
限制。及(
**//新限制**
限制条件(Eq(“一些”,user.Some))
限制.Eq(“状态”,用户状态))
...
))
...
};
}
其他的
{
新列表{
Restrictions.Not(Restrictions.Eq(“Name”,user.Name)),
限制。或(
限制。及(
限制。及(
限制.Eq(“状态”,用户状态))
...
))
...
};
}

如何避免这种重复?

您可以将条件作为变量取出并使用它,例如

         ICriterion criterion;

         if(Setting.SomeSettings)    
         {
           criterion = Restrictions.And(
                            **//new restriction**
                             Restrictions.Eq("Some", user.Some))
                             Restrictions.Eq("Status", user.Status))
                             ...
                        ));
        }
        else
        {
           criterion = Restrictions.And(
                          Restrictions.And(                 
                             Restrictions.Eq("Status", user.Status))
                             ...
                        ));
        }

        new List < ICriterion > {
                    Restrictions.Not(Restrictions.Eq("Name", user.Name)),
                    Restrictions.Or(
                       Restrictions.And(
                        criterion   
                        ...
                 };
ICriterion准则;
if(Setting.SomeSettings)
{
标准=限制。以及(
**//新限制**
限制条件(Eq(“一些”,user.Some))
限制.Eq(“状态”,用户状态))
...
));
}
其他的
{
标准=限制。以及(
限制。及(
限制.Eq(“状态”,用户状态))
...
));
}
新列表{
Restrictions.Not(Restrictions.Eq(“Name”,user.Name)),
限制。或(
限制。及(
标准
...
};

老实说,这似乎只是C#中的一个练习……只要先创建列表,做一些常见的事情,然后在条件允许的情况下添加所需的内容是的,这是我想到的第一个解决方案。但是,我认为这是一个非常受欢迎的任务。而且,我希望有一些扩展方法或应该有的东西。我认为这是一个可能的解决方案。我希望有可能需要动态地构建它。