IQueryable LongTake和LongSkip方法

时间:2017-04-23 22:28:20

标签: c# entity-framework linq

为什么IQueryable中没有LongTakeLongSkip方法?

e.g。我们有LongCount方法

我应该为LongTakeLongSkip方法使用哪种替代代码?

1 个答案:

答案 0 :(得分:1)

不管亚历山大的公平评论,我也问自己,鉴于Skip是一种扩展方法,并且您可以自己查看代码,您可以轻松修改它并自己编写LongSkip

    public static IEnumerable<TSource> LongSkip<TSource>(this IEnumerable<TSource> source, long count) {
        if (source == null) throw Error.ArgumentNull("source");
        return SkipIterator<TSource>(source, count);
    }

    static IEnumerable<TSource> SkipIterator<TSource>(IEnumerable<TSource> source, long count) {
        using (IEnumerator<TSource> e = source.GetEnumerator()) {
            while (count > 0 && e.MoveNext()) count--;
            if (count <= 0) {
                while (e.MoveNext()) yield return e.Current;
            }
        }
    }