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?