【发布时间】:2021-11-05 12:15:45
【问题描述】:
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 的真正用例是什么?
【问题讨论】:
标签: c# .net linq ienumerable iqueryable