public override Expression?Visit(Expression?expression)
{
if (this.candidates.Contains(expression !))
{
if (expression is ColumnExpression column)
{
if (!projectTrivialColumns)
{
return(expression);
}
if (this.map.TryGetValue(column, out var mapped))
{
return(mapped);
}
mapped = generator.MapColumn(column).GetReference(newAlias);
this.map[column] = mapped;
return(mapped);
}
else
{
if (expression !.Type.UnNullify().IsEnum)
{
var convert = expression.TryConvert(expression.Type.IsNullable() ? typeof(int?) : typeof(int));
return(generator.NewColumn(convert).GetReference(newAlias).TryConvert(expression.Type));
}