Порядок NHibernate QueryOver по первому ненулевому значению (объединение) - PullRequest
8 голосов
/ 27 апреля 2011

То, что я пытаюсь придумать, выражается примерно так:

var result = Session.QueryOver<Foo>().OrderBy(f => f.UpdatedAt ?? f.CreatedAt);

Конечно, это не работает.Примерный эквивалент этого в T-SQL:

... order by coalesce(f.UpdatedAt, f.CreatedAt)

Какой кошерный способ сделать "объединение" в NHibernate QueryOver?

Ответы [ 2 ]

9 голосов
/ 27 апреля 2011
.OrderBy(Projections.SqlFunction("coalesce",
                                 NHibernateUtil.DateTime,
                                 Projections.Property<Foo>(x => x.UpdatedAt),
                                 Projections.Property<Foo>(x => x.CreatedAt)))
1 голос
/ 05 августа 2016

Ответ Диего такой, какой я придумал, но мне он показался слишком многословным, поэтому я задал вопрос и получил отличный ответ . Вы можете зарегистрировать свои собственные расширения, а затем просто сделать

.OrderBy(f => f.UpdatedAt.IfNull(f.CreatedAt));

где IfNull - ваше новое расширение. Я даже подал предложение по улучшению в NH Jira, но пока не получил ответа.

...