Является ли цель AsQueryable() просто тем, что вы можете передать IEnumerable методам, которые могут ожидать IQueryable, или есть ли полезная причина для представления IEnumerable как IQueryable? Например, предполагается ли это для таких случаев:
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();
}
Или действительно ли это делает что-то другое:
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();
Разве версии IQueryable этих методов расширения просто создают выражение, которое заканчивается тем же самым действием после его выполнения? Мой главный вопрос: каков реальный прецедент использования AsQueryable?