Le but est-il AsQueryable()
juste de pouvoir transmettre des IEnumerable
méthodes auxquelles on pourrait s'attendre IQueryable
, ou y a-t-il une raison utile de représenter IEnumerable
comme IQueryable
? Par exemple, est-ce censé être pour des cas comme celui-ci:
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 est-ce que cela le fait réellement faire quelque chose de différent:
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();
Les IQueryable
versions de ces méthodes d'extension construisent-elles simplement une expression qui finit par faire la même chose une fois exécutée? Ma question principale est, quel est un cas d'utilisation réel pour l'utilisation AsQueryable
?