¿Debo devolver IEnumerable <T> o IQueryable <T> desde mi DAL?

Sé que esto podría ser una opinión, pero estoy buscando las mejores prácticas.

Según entiendo,IQueryable<T> implementosIEnumerable<T>, así que en mi DAL, actualmente tengo firmas de métodos como las siguientes:

IEnumerable<Product> GetProducts();
IEnumerable<Product> GetProductsByCategory(int cateogoryId);
Product GetProduct(int productId);

Debería estar usandoIQueryable<T> ¿aquí?

¿Cuáles son los pros y los contras de cualquiera de los enfoques?

Tenga en cuenta que estoy planeando usar el patrón Repository, así que tendré una clase como esta:

public class ProductRepository {

    DBDataContext db = new DBDataContext(<!-- connection string -->);

    public IEnumerable<Product> GetProductsNew(int daysOld) {
        return db.GetProducts()
          .Where(p => p.AddedDateTime > DateTime.Now.AddDays(-daysOld ));
    }
}

¿Debo cambiar miIEnumerable<T> aIQueryable<T>? ¿Qué ventajas / desventajas hay para uno u otro?

Respuestas a la pregunta(4)

Su respuesta a la pregunta