当我有IQueryable<T>
(通用)时,我可以使用Take
方法仅返回查询返回的结果集中的N条记录。
当我使用简单的非通用IQueryable
时,Take
方法不可用。是否有其他方法可以获得与Take
方法相同的结果?
更新:,另一个问题解决了这个问题。就我而言,必要的代码甚至比Jon Skeet在另一个问题中提出的代码更简单。这是我的最终代码:
dynamic tempQuery = originalQuery;
finalQuery = Queryable.Take(tempQuery, numRecords);
答案 0 :(得分:1)
使用此扩展方法:
public static IQueryable Take(this IQueryable source, int count)
{
MethodCallExpression mce = Expression.Call(
typeof(Queryable),
"Take",
new Type[] { source.ElementType },
source.Expression,
Expression.Constant(count)
);
return source.Provider.CreateQuery(mce);
}
如果您匹配方法签名并提供格式良好的表达式树,则可以使用Queryable
上定义的各种扩展方法(例如Skip
和其他扩展方法)实现类似的效果。