Question

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?

Was it helpful?

Solution

.OrderBy(Projections.SqlFunction("coalesce",
                                 NHibernateUtil.DateTime,
                                 Projections.Property<Foo>(x => x.UpdatedAt),
                                 Projections.Property<Foo>(x => x.CreatedAt)))

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top