Я экспериментирую с использованием строки для хранения различных типов данных в базе данных. Когда я делаю запросы, мне нужно привести строки к нужному типу в самом запросе. Я использую .Net с NHibernate, и был рад узнать, что существует функциональность для этого.
Для примера я использую этот простой класс:
public class Foo
{
public string Text { get; set; }
}
Я успешно использую Projection.Cast для приведения к числовым значениям, например, следующий запрос корректно возвращает все Foos с целым числом, хранящимся как int - от 1 до 10.
var result = Session.CreateCriteria<Foo>()
.Add(Restrictions.Between(Projections.Cast(NHibernateUtil.Int32, Projections.Property("Text")), 1, 10))
.List<Foo>();
Теперь, если я попробую использовать это для DateTime, я не смогу заставить его работать независимо от того, что я пытаюсь. Зачем?!
var date = new DateTime(2010, 5, 21, 11, 30, 00);
AddFooToDb(new Foo { Text = date.ToString() } ); // Will add it to the database...
var result = Session
.CreateCriteria<Foo>()
.Add(Restrictions.Eq(Projections.Cast(NHibernateUtil.DateTime, Projections.Property("Text")), date))
.List<Foo>();