首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Joins对SQL2000分页的IQueryable

使用Joins对SQL2000分页的IQueryable
EN

Stack Overflow用户
提问于 2009-04-08 16:32:42
回答 1查看 158关注 0票数 0

我有一个包含大约10个连接的查询。使用列表视图和Linq Data Source,它可以在SQL2008上分页,但在SQL2000上运行时无法产生正确的结果。没有抛出异常,但结果显然是无序的,有时会返回相同的页面。读取LINQ文档,在SQL2000上不支持对具有联接的查询进行分页。说得够多了,尽管我本以为会有一个例外。

我现在无法将数据从SQL2000上移出。解决方案是执行完整查询,然后执行基于内存的分页。

代码语言:javascript
复制
protected void LinqDataSourceMain_Selecting(object sender,
    LinqDataSourceSelectEventArgs e)
{
    // var query = myquery with join...
    e.Result = query.ToList();
}

现在的问题是:调用ToList()和ToArray()哪个更有效?

AsEnumerable()不能解决这个问题。看一下Reflector的扩展方法,它只是返回'source‘,所以这对我来说是有意义的。

代码语言:javascript
复制
e.Result = query.AsEnumerable();
public static IEnumerable<TSource> AsEnumerable<TSource>(
    this IEnumerable<TSource> source)
{
    return source;
}

但是,下面的代码会比ToList()或ToArray()更有效吗?它确实起作用了,而且它确实推迟了执行。

代码语言:javascript
复制
e.Result = query.ToEnumerable();

public static IEnumerable<TSource> ToEnumerable<TSource>(
    this IEnumerable<TSource> source)
{
    foreach (var item in source)
        yield return item;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-04-08 16:40:00

ToList()将比ToArray()更高效,因为它不需要从超大的缓冲区到固定大小的数组进行最终复制。

如果你打算在内存中分页,你不会想要延迟执行(IMO),因为你需要得到项目的计数和随机访问。您不希望每次都必须重新执行查询。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/730809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档