Ограничения гибернации (и / или) - PullRequest
0 голосов
/ 21 июня 2010

небольшие вопросы об ограничениях.

У меня такой запрос:

Where  A in(1,6) and (B not like 'Value%' or B not like 'ValueII%')

проблема в том, что поле B не содержит фиксированного значения, может быть одним или несколькими.

Пожалуйста, (N) эксперты Hibernate - помогите мне, я не могу найти рабочее решение.Любая помощь с благодарностью!

Ответы [ 2 ]

3 голосов
/ 21 июня 2010

Вы можете использовать дизъюнкции для обработки случаев ИЛИ, например:

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 здесь?

0 голосов
/ 21 июня 2010

проблема в том, что я не знаю точно, сколько у меня ограничений, и мне нужно использовать FOR для дизъюнкции.

Примерно так:

IList results = session.CreateCriteria(typeof(MyType))
.Add(Restrictions.In("A", new [] {1, 6}))
.Add(Restrictions.Disjunction());
 for(int i = 0, i < value.Lenght;i++){
    .Add.Restrictions.Not(Restrictions.Like("B", "Value%"));
    .Add.Restrictions.Not(Restrictions.Like("B", "ValueII%"));
 }
.List<MyType>();

спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...