public SqlCaseExpression (Type type, IEnumerable<CaseWhenPair> cases, Expression elseCase)
: base (ArgumentUtility.CheckNotNull ("type", type))
{
ArgumentUtility.CheckNotNull ("cases", cases);
if (elseCase == null && type.IsValueType && Nullable.GetUnderlyingType (type) == null)
throw new ArgumentException ("When no ELSE case is given, the expression's result type must be nullable.", "type");
var casesArray = cases.ToArray();
if (casesArray.Any (c => !type.IsAssignableFrom (c.Then.Type)))
throw new ArgumentException ("The THEN expressions' types must match the expression type.", "cases");
if (elseCase != null && !type.IsAssignableFrom (elseCase.Type))
throw new ArgumentException ("The ELSE expression's type must match the expression type.", "elseCase");
_cases = Array.AsReadOnly (casesArray);
_elseCase = elseCase;
}