Мы используем NHibernate поверх SQL Server и SQLite. База данных хранит записи в строках, а не в столбцах - каждая строка имеет Path|Value
в качестве столбцов. Путь и значение являются свойствами string
.
Для определенных значений Path
мы хотели бы запросить неравенства - больше-чем, меньше-чем и т.д. c.
Проблема, с которой мы сталкиваемся, заключается в том, что, поскольку свойства являются строками, неравенства используют сравнения строк - например, поиск по запросу Value >= 18
возвращает строки, где Value = 5
. К сожалению, у нас возникли проблемы с решением этой проблемы.
1) Это ограничение дает неверные результаты (например, 18 < 5
):
Restrictions.Ge("Value", item.Value);
2) Мы попытались выполнить приведение значение в целое число, но этот код дает SqlException
из NHibernate - Error converting data type nvarchar to bigint.
Restrictions.Le(Projections.Cast(NHibernateUtil.Int64, Projections.Property("SearchString")), item.Value)
3) Мы искали способ дополнить значение свойства нулями (чтобы мы получили 018 > 005
), но не смогли найти способ сделать это в NHibernate.
Есть ли у кого-нибудь совет?
Заранее спасибо!