Devo retornar IEnumerable <T> ou IQueryable <T> do meu DAL?

Eu sei que isso pode ser uma opinião, mas estou procurando as melhores práticas.

Como eu entendo,IQueryable<T> implementaIEnumerable<T>, portanto, no meu DAL, atualmente tenho assinaturas de método como as seguintes:

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

Eu deveria estar usandoIQueryable<T> aqui?

Quais são os prós e os contras de qualquer uma das abordagens?

Observe que estou planejando usar o padrão Repository para ter uma classe 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 ));
    }
}

Devo mudar minhaIEnumerable<T> paraIQueryable<T>? Que vantagens / desvantagens existem para um ou outro?

questionAnswers(4)

yourAnswerToTheQuestion