Adding more than one condition in Projection.Conditionals for queryover
c#, conditional-statements, nhibernate, queryover
Solution
The `Projections.Conditional` returns `IProjection`, and its signature is:
/// <summary>
/// Conditionally return the true or false part, dependention on the criterion
/// </summary>
/// <param name="criterion">The criterion.</param><param name="whenTrue">The when true.
/// </param><param name="whenFalse">The when false.</param>
/// <returns/>
public static IProjection Conditional(ICriterion criterion
, IProjection whenTrue
, IProjection whenFalse);
And that means, that the third parameter can again be this Conditional projection:
.OrderBy
(
Projections.Conditional(
Restrictions.Where<House>(r => r.Name.IsLike("starks")),
Projections.Constant(1),
Projections.Conditional(
Restrictions.Where<House>(r => r.Name.IsLike("wildlings")),
Projections.Constant(2),
Projections.Conditional(
Restrictions.Where<House>(r => r.Name.IsLike("lannisters")),
Projections.Constant(3),
Projections.Constant(0)
)
)
)
)
.Asc()
The generated SQL will look like:
ORDER BY
(case when this_.Name LIKE 'starks' then 1 else
(case when this_.Name LIKE 'wildlings' then 2 else
(case when this_.Name LIKE 'lannisters' then 3 else 0 end) end) end) asc
Problem
I am trying to write a case with more than one `when` clause; something like this: ``` ... case when 'starks' then 1 when 'wildlings' then 2 when 'lannisters' then 3 Else 0 End ... ``` I've done a single conditional before with something like ``` .OrderBy(Projections.Conditional( Restrictions.Where<House>(r => r.Name.IsLike("starks")), Projections.Constant(0), Projections.Constant(1))).Asc(); ``` But I can't figure out how to add an extra condition / `when` clause in there :/ I've tried adding an extra outer conditional, extra restriction etc, but always end up with syntax error.. Thanks for the help.