Я хочу включить переводы значений свойств в мои запросы QueryOver.
Мне нравится писать запросы в соответствии с шаблоном объекта запроса, непосредственно создавая модели представления MVC. В моих моделях представлений я стараюсь использовать максимально простые типы свойств, сохраняя сложность преобразования вне представлений и контроллеров. Это означает, что иногда мне нужно будет преобразовывать один тип в другой, например, даты в строки.
Можно утверждать, что такие преобразования должны выполняться в представлениях, но, поскольку большинство моих моделей представления непосредственно переводятся в объекты JSON, это может привести к тому, что преобразование станет намного более громоздким. Выполнение преобразования даты в строку в JavaScript в лучшем случае проблематично, и мой преобразователь JSON недостаточно гибок.
Вот пример того, что я делаю:
// Entity.
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public DateTimeOffset DateCreated { get; set; }
}
// View model.
public class CustomerViewModel
{
public string Name { get; set; }
public string DateCreated { get; set; } // Note the string type here.
}
// Query.
CustomerViewModel model = null;
List<CustomerViewModel> result = Session.QueryOver<Customer>()
.SelectList(list => list
.Select(n => n.Name).WithAlias(() => model.Name)
.Select(n => n.DateCreated).WithAlias(() => model.DateCreated))
.TransformUsing(Transformers.AliasToBean<CustomerViewModel>());
.Future<CustomerViewModel>()
.ToList();
При выполнении кода запроса выдается следующее исключение:
Object of type 'System.DateTimeOffset' cannot be converted to type 'System.String'.
Очевидно, это из-за следующей строки:
.Select(n => n.DateCreated).WithAlias(() => model.DateCreated))
Итак, вопрос: как включить преобразование даты в строку в запрос?
Я не хочу выполнять преобразование после выполнения запроса, потому что мне нужен дополнительный промежуточный класс для хранения результатов перед их преобразованием.