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 8

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, но пока не получил ответа.