Jest celem AsQueryable()
tylko po to, abyś mógł przekazać IEnumerable
metody, które mogą się spodziewać IQueryable
, lub czy istnieje przydatny powód, aby reprezentować je IEnumerable
jakoIQueryable
? Na przykład, czy powinno tak być w takich przypadkach:
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();
}
A może faktycznie sprawia, że robi coś innego:
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();
Czy IQueryable
wersje tych metod rozszerzających po prostu tworzą wyrażenie, które w końcu robi to samo po wykonaniu? Moje główne pytanie brzmi: jaki jest prawdziwy przypadek użycia AsQueryable
?