Should I return IEnumerable<T> or IQueryable<T> from my DAL?
I know this could be opinion, but I'm looking for best practices.

As I understand, IQueryable<T> implements IEnumerable<T>, so in my DAL, I currently have method signatures like the following:

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

Should I be using IQueryable here?

What are the pros and cons of either approach? 

Note that I am planning on using the Repository pattern so I will have a class like so:

    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 ));
        }
    }


Should I change my `IEnumerable<T>` to `IQueryable<T>`? What advantages/disadvantages are there to one or the other?
Should I return IEnumerable<T> or IQueryable<T> from my DAL?
===

I know this could be opinion, but I'm looking for best practices.

As I understand, IQueryable<T> implements IEnumerable<T>, so in my DAL, I currently have method signatures like the following:

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

Should I be using IQueryable here?

What are the pros and cons of either approach? 

Note that I am planning on using the Repository pattern so I will have a class like so:

    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 ));
        }
    }


Should I change my `IEnumerable<T>` to `IQueryable<T>`? What advantages/disadvantages are there to one or the other?