¿El propósito es AsQueryable()
solo para que pueda pasar un IEnumerable
a métodos que podrían esperar IQueryable
, o hay una razón útil para representar IEnumerable
como IQueryable
? Por ejemplo, se supone que debe ser para casos como este:
IEnumerable<Order> orders = orderRepo.GetAll();
// I don't want to create another method that works on IEnumerable,
// so I convert it here.
CountOrders(orders.AsQueryable());
public static int CountOrders(IQueryable<Order> ordersQuery)
{
return ordersQuery.Count();
}
¿O realmente lo hace hacer algo diferente?
IEnumerable<Order> orders = orderRepo.GetAll();
IQueryable<Order> ordersQuery = orders.AsQueryable();
IEnumerable<Order> filteredOrders = orders.Where(o => o.CustomerId == 3);
IQueryable<Order> filteredOrdersQuery = ordersQuery.Where(o => o.CustomerId == 3);
// Are these executed in a different way?
int result1 = filteredOrders.Count();
int result2 = filteredOrdersQuery.Count();
¿Las IQueryable
versiones de estos métodos de extensión simplemente crean una expresión que termina haciendo lo mismo una vez que se ejecuta? Mi pregunta principal es, ¿cuál es un caso de uso real para usar AsQueryable
?