Вы можете использовать дизъюнкции для обработки случаев ИЛИ, например:
IList results = session.CreateCriteria(typeof(MyType))
.Add(Restrictions.In("A", new [] {1, 6}))
.Add(Restrictions.Disjunction()
.Add.Restrictions.Not(Restrictions.Like("B", "Value%"))
.Add.Restrictions.Not(Restrictions.Like("B", "ValueII%")))
.List<MyType>();
Если вам нужно обработать условия дизъюнкции в цикле for (согласно вашему продолжению), вы можете использовать такой код:this:
ICriteria query = session.CreateCriteria(typeof(MyType));
query.Add(Restrictions.In("A", new [] {1, 6}))
Disjunction disjunction = Restrictions.Disjunction();
foreach (var value in values) {
disjunction.Add(Restrictions.Not(Restrictions.Like(value, "Value%")));
disjunction.Add(Restrictions.Not(Restrictions.Like(value, "ValueII%")));
}
query.Add(disjunction);
IList results = query.List<MyType>();
При этом, я думаю, в вашей логике может быть недостаток.Если вы проверяете эти значения как «не совпадающие с одним шаблоном ИЛИ не совпадающие с другим шаблоном», то условие всегда будет иметь значение «истина» (если шаблоны не совпадают).Вы уверены, что хотите использовать OR здесь?