Just want to add that you can directly manipulate LINQ expressions. It might be more complex, but you can basically transform an IQueryable into another one. And the result can be used everywhere you can use LINQ.
You can also take advantage of ExpressionVisitor to manipulate expressions.
If you’re in C#, it seems more natural to work with LINQ expressions.