NHibernate QueryOver порядок по первому ненулевому значению (объединение)
То, что я пытаюсь придумать, выражается примерно так:
var result = Session.QueryOver<Foo>().OrderBy(f => f.UpdatedAt ?? f.CreatedAt);
Конечно, это не работает. Грубый эквивалент этого в T-SQL -
... order by coalesce(f.UpdatedAt, f.CreatedAt)
Каков кошерный способ сделать "слияние" в NHibernate QueryOver?
2 ответа:
.OrderBy(Projections.SqlFunction("coalesce", NHibernateUtil.DateTime, Projections.Property<Foo>(x => x.UpdatedAt), Projections.Property<Foo>(x => x.CreatedAt)))
Ответ Диего - это то, что я придумал, но он показался мне слишком многословным, поэтому я задал Вопрос и получил Отличный ответ. В принципе, вы можете зарегистрировать свои собственные расширения, а затем просто сделать
.OrderBy(f => f.UpdatedAt.IfNull(f.CreatedAt));
Где
IfNull
- ваше новое расширение. Я даже представил предложение по улучшению в NH Jira, но пока не получил ответа.