The nice part about using Linq and IQueryable instead of e.g. query strings, is that the compiler (and intellisense) can check for some errors at compile-time instead of run-time. Just have to make sure your database model is 1:1 with the actual database.
After you have the data you can throw it into a non-database DTO to re-couple a bit and pass it between layers.