O objetivo é AsQueryable()apenas para que você possa passar um IEnumerablepara métodos que você pode esperar IQueryable, ou há uma razão útil para representar IEnumerablecomo IQueryable? Por exemplo, deve 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();
}
Ou realmente faz 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();
As IQueryableversões desses métodos de extensão apenas criam uma Expressão que acaba fazendo a mesma coisa depois de executada? Minha pergunta principal é: qual é um caso de uso real para usar AsQueryable?