У меня есть запрос nHibernate с использованием критериев, и я пытаюсь наложить строку на bool в самом запросе. Я сделал то же самое с закидывающих строку INT, и что хорошо работает (свойство «DataField» является «1» в виде строки):casting string to bool using nHibernate Criteria
var result = Session
.CreateCriteria<Car>()
.Add(Restrictions.Eq((Projections.Cast(NHibernateUtil.Int32,
Projections.Property("DataField"), 1))
.List<Car>();
tx.Commit();
Но я пытаюсь сделать то же самое с BOOL, но Я не получить ожидаемый результат:
var result = Session
.CreateCriteria<Car>()
.Add(Restrictions.Eq((Projections.Cast(NHibernateUtil.bool,
Projections.Property("DataField"), true))
.List<Car>();
tx.Commit();
«DataField» это строка «True», но результат в пустом списке, где она должна содержать 100 элементов с «DataField» свойства строки установлена в «Истинный ». Я пробовал с строкой «true» и «1», но результат по-прежнему остается пустым.
[EDIT]
В комментарии ниже, я мог бы проверить строку «True» или «False», но я бы сказал, что это более общий вопрос, чем просто для Boolean.
Обратите внимание, что идея состоит в том, чтобы иметь какое-то представление значений ключевых значений данных, где значение может быть разными типами данных. Мне нужна таблица значений, чтобы содержать все данные, поэтому сохранение данных в виде строки кажется самым чистым решением!
Мне удалось использовать вышеописанный метод для хранения как int, так и double как строки, а также для приведения в запрос, но мне не удалось использовать тот же метод для DateDime и Boolean.
И для DateTime крайне важно иметь фактический объект DateTime.
Как я могу сделать бросок из строки в bool, а строка в DateTime работать в запросах?
Благодаря
Не понимаю, почему не просто 'Restrictions.Eq (« DataField »,« True »)' –
Вы правы. Для логического я мог бы легко пойти на сравнение строк, но для DateTime у меня такая же проблема, как и в bool, и там очень важно передать строку объекту DateTime –
, почему у вас есть поле datetime, отображаемое как строка? –