我有一个扩展方法,可以同时对IEnumerable
和进行操作IQueryable
。该方法最终解析输入和调用Skip().Take()
。
public static IEnumerable<T> SelectRange<T>(
this IEnumerable<T> target,
RangeHeaderValue range
)
此方法适用于 anIQueryable
但它返回一个IEnumerable
. 所以我添加了另一种方法进行转换,调用第一种方法并再次转换:
public static IQueryable<T> SelectRange<T>(
this IQueryable<T> target,
RangeHeaderValue range
)
{
return target.AsEnumerable().SelectRange(range).AsQueryable();
}
像这样链式转换是否安全?我担心它可能会干扰提供IQueryable
程序,而是在内存集合上运行该方法。我了解延迟/急切加载的基础知识,但这是一个相当复杂的主题,我不想只是假设它会起作用。
注意:关于链接的危险,公认的答案是正确的,但我想补充一点,实现该IQueryable
方法并从该方法调用它IEnumerable
(因此只需切换事物)是安全的。