При попытке выбрать свойства из подзапроса (как в QueryOver: select columns from subquery) типа DateTime я получаю следующее исключение:QueryOver Выбор DateTime бросает исключение
The type System.DateTime can not be assigned to a property of type System.Int32
код выглядит следующим образом:
var subQuery = QueryOver.Of<Model>().Where(x => x.ForeignKey == someId);
mainQuery.SelectList(s1 =>
s1.SelectSubQuery(subQuery.Select(x => x.ChangeDate)).WithAlias(() => mainQueryAlias.ChangeDate)
.Select(...) //properties from mainQuery
mainQuery.TransformUsing(Transformers.AliasToBean<MainModel>());
где ChangeDate имеет тип DateTime.
Исключение тогда происходит:
var expectResultList = mainQuery.List();
Когда я удалить ChangeDate из выпадающего списка он работает. . Другие свойства (например, тип INT/строка из подзапроса может быть успешно выбран, а я думаю, что я должен пропускать некоторые преобразования где-то, но я понятия не имею, где
РЕШЕНИЕ.
Проблема заключалась в том, что я используя один и тот же подзапрос более чем один раз для выбора различных значений подзапроса:
s1.SelectSubQuery(subQuery.Select(smth.).WithAlias(some alias)
.SelectSubQuery(subQuery.Select(smth. else).WithAlias(other alias)
Однако после выполнения одного выберите, как-то следующее выбери заявления будет использовать неправильный тип для тока (от prevous запроса?!?) запрос ...
Решения просто поставить .clone перед каждым выбрать, чтобы сохранить запрос в состоянии по умолчанию:
s1.SelectSubQuery(subQuery.Clone().Select(smth.).WithAlias(some alias)
.SelectSubQuery(subQuery.Clone().Select(smth. else).WithAlias(other alias)
Концепция верная. Наверняка. Я бы сказал, что в вашем коде есть скрытая «опечатка». Проверьте [this] (http://stackoverflow.com/a/24514888/1679310), чтобы убедиться, что вы на правильном пути. SO: Я бы дважды заверил, что DTO и проект возврата (WithAlias) действительно соответствуют. Если вы заметили фрагмент, который вы передали, есть 'mainQuery' и' m_Query' ... так что эти два не относятся ... –