0
我有一個包含約10個連接的查詢。使用列表視圖和Linq數據源可以很好地對SQL2008進行頁面處理,但在針對SQL2000運行時無法產生正確的結果。沒有發生異常,但結果顯然不符合規定,有時會返回相同的頁面。通過LINQ Docs閱讀,在SQL2000上不支持對連接查詢進行分頁。夠了,雖然我會預料到一個例外。IQueryable針對SQL 2000與連接尋呼
我現在無法將數據從SQL2000移出。解決方案是做一個完整的查詢,然後執行基於內存的分頁。
protected void LinqDataSourceMain_Selecting(object sender,
LinqDataSourceSelectEventArgs e)
{
// var query = myquery with join...
e.Result = query.ToList();
}
現在的問題是:調用ToList()或ToArray()更有效嗎?
AsEnumerable()不能解決問題。用Reflector看擴展方法,它只是返回'源',所以這對我來說很有意義。
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;
}
謝謝。我需要每次重新查詢,因爲這是一個Web應用程序,我真的不想將結果存儲在臨時位置,如Session。仍然在延期執行的圍欄上? Mybe劈頭髮?最後,我應該能夠脫離sql 2k,但現在不行。 – andleer 2009-04-08 17:06:53
您打算如何計算出要顯示的頁面數量?結果不合理的事實表明,無論你做什麼,都會遇到問題 - 除非可以使排序順序保持一致,否則除非我錯過了某些內容,否則無法合理地進行頁面切換。 – 2009-04-08 17:09:43
當我返回一個列表時,分頁和排序工作正常。當我返回一個IQueryable時它失敗。使用智商,第一頁顯示正確,但事情從那裏開始適用。看一下SQL分析器,SQL實際上是令人討厭的。子查詢通過連接上的子查詢等。 – andleer 2009-04-08 17:20:20