2011-05-04 92 views
5

我有一個問題,試圖最大化我們的具有頁面的列表視圖的性能。使用實體框架選擇範圍

我希望實體框架做一個select語句,但只返回一個範圍的結果(範圍= listview的一頁的項目)。

我已經搜索谷歌,但沒有在這發現任何結果。我只發現我可以做一個.ToList()。GetRange(開始索引,結束索引),但然後所有的項目將被加載在內存中,這就是我想避免...

有人可以告訴我這是否可以做到? (我不想使用存儲過程或視圖或類似的東西,因爲我們的列表視圖必須是可重用的...)

謝謝!

+1

跳過(50)在一個有序的查詢。取(10)會給你10個項目從50開始。 – 2011-05-04 07:13:09

回答

13

您應該能夠使用.Take(x).ToList()

編輯:很抱歉,請.Skip(startPosition).Take(numberOfItems).ToList()

+0

謝謝,這個訣竅:) – 2011-05-04 08:04:18

1

如果你不使用延遲加載一定應用過濾器時,爲了避免裝載時的裝載()之前使用Query()在應用過濾器之前的整個集合:

context.Entry(blog) 
    .Collection(b => b.Posts) 
    .Query() 
    .Skip(startPosition) 
    .Take(numberOfItems) 
    .Load() 
    .ToList(); 

當使用Query方法時,通常最好關閉導航屬性的延遲加載。這是因爲否則整個集合可能會在執行過濾查詢之前或之後通過延遲加載 機制自動加載。

有關詳細信息:http://msdn.microsoft.com/en-us/data/jj574232.aspx