如何限制非泛型IQueryable中的记录数

时间:2011-04-18 15:04:36

标签: c# linq-to-entities

当我有IQueryable<T>(通用)时,我可以使用Take方法仅返回查询返回的结果集中的N条记录。

当我使用简单的非通用IQueryable时,Take方法不可用。是否有其他方法可以获得与Take方法相同的结果?

理查德指出,

更新:,另一个问题解决了这个问题。就我而言,必要的代码甚至比Jon Skeet在另一个问题中提出的代码更简单。这是我的最终代码:

dynamic tempQuery = originalQuery;
finalQuery = Queryable.Take(tempQuery, numRecords);

1 个答案:

答案 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和其他扩展方法)实现类似的效果。