Nhibernate C # - возвращает только те объекты, у которых строковое свойство не равно нулю или не пусто - PullRequest
2 голосов
/ 21 января 2010

Я пишу запрос с использованием ICriteria, который должен возвращать только те объекты, для которых свойство «Сообщение» имеет значение (т.е. не является нулевым или пустым). Ниже приведен формат, который я использую.

ICriteria.Add(Restrictions.Not(Restrictions.Eq("Message", " "));
ICriteria.Add(Restrictions.Not(Restrictions.Eq("Message", String.Empty));

Может ли кто-нибудь помочь мне с этим? Спасибо!

Ответы [ 4 ]

4 голосов
/ 21 января 2010

Возможно, вы захотите что-то вроде:

ICriteria a = session.CreateCriteria(typeof(A));
a.add(Restrictions.Not(Restrictions.Eq("Message", " "));
a.add(Restrictions.Not(Restrictions.Eq("Message", string.Empty));

Хотя ваш первый не проверяет нуль, он проверяет один пробел.

3 голосов
/ 21 января 2010

Я не пробовал это, но это должно работать следующим образом:

ICriteria crit = session.CreateCriteria(typeof(theType))
                   .Add(Restrictions.IsNotNull("Message"))
                   .Add(Restrictions.IsNotEmpty("Message"));
1 голос
/ 21 января 2010

Наконец, я обнаружил комбинацию, которую искал!

lvCriteria.Add(Restrictions.Not(Expression.Eq("Msg", string.Empty)));

Эта комбинация ограничений и выражений работает, как и ожидалось; сужение всех пустых строк. Я не знаю, почему я не смог достичь этих результатов раньше даже при:

lvCriteria.Add(Restrictions.Not(Restrictions.Eq("Msg", string.Empty)));

Спасибо всем, кто пытался.

0 голосов
/ 13 апреля 2010

Что вам действительно нужно:

ICriteria crit = session.CreateCriteria(typeof(theType))
.Add(Restrictions.Not(Restrictions.Eq("Msg", string.Empty)))
.Add(Restrictions.IsNotNull("Msg"))

Это работает нормально для меня, и профилировщик показывает правильный SQL, то есть что-то вроде:

msg<>'' and msg is not null. 

Первый ответ не работал для меня как Ограничения. IsNotEmpty / Empty применяется только к коллекциям (по крайней мере, в NH 2.0.1).

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