Mục đích AsQueryable()
là để bạn có thể chuyển một IEnumerable
tới các phương thức mà bạn có thể mong đợi IQueryable
, hay có lý do hữu ích nào để thể hiện IEnumerable
như IQueryable
vậy không? Ví dụ, nó phải dành cho những trường hợp như thế này:
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();
}
Hay nó thực sự khiến nó làm điều gì đó khác biệt:
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();
Có phải các IQueryable
phiên bản của các phương thức mở rộng này chỉ xây dựng một Biểu thức kết thúc hoạt động tương tự khi nó được thực thi không? Câu hỏi chính của tôi là, trường hợp sử dụng thực sự để sử dụng là AsQueryable
gì?