8

What I'm trying to come up is something that's expressed like this:

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

Sure enough, this doesn't work. Rough equivalent of this in T-SQL is

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

What's the kosher way to do "coalescing" in NHibernate QueryOver?

Anton Gogolev
  • 113,561
  • 39
  • 200
  • 288

2 Answers2

9
.OrderBy(Projections.SqlFunction("coalesce",
                                 NHibernateUtil.DateTime,
                                 Projections.Property<Foo>(x => x.UpdatedAt),
                                 Projections.Property<Foo>(x => x.CreatedAt)))
Diego Mijelshon
  • 52,548
  • 16
  • 116
  • 154
1

Diego's answer is the way I came up with, but it seemed to be too verbose to me, so I asked a question, and got an excellent answer. Basically, you can register your own extensions and then just do

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

where IfNull is your new extension. I've even submitted an improvement proposal to NH Jira, but got no response yet.

Community
  • 1
  • 1
Sergei Tachenov
  • 24,345
  • 8
  • 57
  • 73