Lo scopo è AsQueryable()
solo così puoi passare IEnumerable
a metodi che potrebbero aspettarti IQueryable
, o c'è una ragione utile per rappresentare IEnumerable
come IQueryable
? Ad esempio, dovrebbe essere per casi come questo:
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 effettivamente gli fa fare qualcosa di diverso:
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();
Le IQueryable
versioni di questi metodi di estensione creano solo un'espressione che finisce per fare la stessa cosa una volta eseguita? La mia domanda principale è: qual è un vero caso d'uso per l'utilizzo AsQueryable
?