protected internal override Expression VisitTypeImplementedBy(TypeImplementedByExpression typeIb)
 {
     return(typeIb.TypeImplementations.Reverse().Aggregate((Expression)NullType, (acum, imp) => Expression.Condition(
                                                               Expression.NotEqual(Visit(NullifyColumn(imp.Value)), NullId),
                                                               Expression.Constant(imp.Key, typeof(Type)),
                                                               acum)));
 }
    protected internal virtual Expression VisitTypeImplementedBy(TypeImplementedByExpression typeIb)
    {
        var implementations = Visit(typeIb.TypeImplementations, eid => (PrimaryKeyExpression)Visit(eid));

        if (implementations != typeIb.TypeImplementations)
        {
            return(new TypeImplementedByExpression(implementations));
        }
        return(typeIb);
    }