It depends how exactly you would implement it.
Assuming the underlying data don't change, the expression tree provided to the IQueryable for execution contains everything. So if the same query is sent twice the same expression tree will be generated and the same results are expected to be sent back.
So caching those would make sense.
The problem with caching in OData is that clients may construct the query programmatically and thus the service might end up seeing lot of slightly different queries which makes caching rather hard.
Thanks,
Vitek Karas [MSFT]