NHibernate QueryOver order by first non-null value (coalescing)
Asked Answered
M

2

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?

Montgolfier answered 27/4, 2011 at 13:7 Comment(0)
P
10
.OrderBy(Projections.SqlFunction("coalesce",
                                 NHibernateUtil.DateTime,
                                 Projections.Property<Foo>(x => x.UpdatedAt),
                                 Projections.Property<Foo>(x => x.CreatedAt)))
Polaris answered 27/4, 2011 at 16:59 Comment(0)
R
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.

Remember answered 5/8, 2016 at 4:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.