【发布时间】:2009-04-08 16:32:42
【问题描述】:
我有一个包含大约 10 个连接的查询。使用列表视图和 Linq 数据源,它对 SQL2008 进行了很好的分页,但在对 SQL2000 运行时无法产生正确的结果。没有抛出异常,但结果显然是乱序的,有时会返回相同的页面。通读 LINQ Docs,SQL2000 不支持对带有连接的查询进行分页。说得够多了,虽然我本以为会有例外。
我现在无法将数据移出 SQL2000。解决方案是执行完整查询,然后执行基于内存的分页。
protected void LinqDataSourceMain_Selecting(object sender,
LinqDataSourceSelectEventArgs e)
{
// var query = myquery with join...
e.Result = query.ToList();
}
现在的问题是:调用 ToList() 还是 ToArray() 效率更高?
AsEnumerable() 不能解决问题。查看使用反射器的扩展方法,它只是返回“源”,所以这对我来说很有意义。
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;
}
【问题讨论】: