我有一个包含大约10个连接的查询。使用列表视图和Linq Data Source,它可以在SQL2008上分页,但在SQL2000上运行时无法产生正确的结果。没有抛出异常,但结果显然是无序的,有时会返回相同的页面。读取LINQ文档,在SQL2000上不支持对具有联接的查询进行分页。说得够多了,尽管我本以为会有一个例外。
我现在无法将数据从SQL2000上移出。解决方案是执行完整查询,然后执行基于内存的分页。
protected void LinqDataSourceMain_Selecting(object sender,
LinqDataSourceSelectEventArgs e)
{
// var query = myquery with join...
e.Result = query.ToList();
}现在的问题是:调用ToList()和ToArray()哪个更有效?
AsEnumerable()不能解决这个问题。看一下Reflector的扩展方法,它只是返回'source‘,所以这对我来说是有意义的。
e.Result = query.AsEnumerable();
public static IEnumerable<TSource> AsEnumerable<TSource>(
this IEnumerable<TSource> source)
{
return source;
}但是,下面的代码会比ToList()或ToArray()更有效吗?它确实起作用了,而且它确实推迟了执行。
e.Result = query.ToEnumerable();
public static IEnumerable<TSource> ToEnumerable<TSource>(
this IEnumerable<TSource> source)
{
foreach (var item in source)
yield return item;
}发布于 2009-04-08 16:40:00
ToList()将比ToArray()更高效,因为它不需要从超大的缓冲区到固定大小的数组进行最终复制。
如果你打算在内存中分页,你不会想要延迟执行(IMO),因为你需要得到项目的计数和随机访问。您不希望每次都必须重新执行查询。
https://stackoverflow.com/questions/730809
复制相似问题