and then limiting the results with an if while looping through ALL recipes very inefficient? Wouldn't using a WHERE clause be much better?

This is why I haven't really started using data objects - it's all easy and neat when you only need "CRUD" but I've yet to see one neat way of, for example, representing complex JOINs or any kind of functions calls in SQL when using data objects.