Как включить преобразование значений свойств в NHibernate QueryOver .SelectList?

Я хочу включить преобразование значений свойств в свои запросы 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))

Итак, вопрос: как включить преобразование даты в строку в запрос?

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

7
задан Sandor Drieënhuizen 8 August 2011 в 19:11
поделиться