2013-12-19 64 views
1
var data= (from a in context.Table1 
       where a.Id== id 
       select a); 
    return data.ToList(); 

我在wpf項目中有上面的linq查詢。上面的查詢從SQLite數據庫中獲取大約0.2-0.3百萬行。取數據的結果很快,但是在執行data.ToList()的同時,由於沒有使用數據庫,所以需要很多時間。的行,因此我的用戶界面等待15-20秒來查看結果。我應該如何着手解決這個問題。另外,如果上面的表包含外鍵然後在訪問子元素時拋出ObjectDisposeedException。我想它是由於延遲加載,所以我試圖明確設置子元素。它的工作,但後來我的過程變得更慢Linq Query非常慢

+0

請告訴我們你以後如何使用數據。你綁定他們做一個cotnro?什麼類型的cotnrol?謝謝 – Christos

+0

一種情況是我需要在圖表中顯示所有數據,另一種情況就像是取平均值等。我沒有將它綁定到控件上,我做了一些計算,並將計算結果綁定到基本控件,如文本塊等 – androider

+0

如何將數據顯示到圖表中?你是否將查詢的結果設置爲圖表的數據源?請張貼我們這部分代碼。看看綁定是如何發生是非常重要的,以避免查詢的.ToList(),如果可能的話。 – Christos

回答

2

當然LINQ命令「執行」在任何時候,下面只是代表查詢。

var data= (from a in context.Table1 
       where a.Id== id 
       select a); 

查詢,一旦你遍歷它作爲return data.ToList();這正是ToList方法做什麼時,纔會執行。

我建議您在尋呼機中使用SkipTake運算符來縮小從數據庫查詢的結果的範圍。這樣做,你只需要10或20個元素,或者你需要的任何東西,從而獲得更平滑的體驗。

做分頁必將優化您的檢索性能也..

+0

同意。不要在UI中放置0.3百萬行。分頁。 – jlvaquero

+0

事情是沒有分頁,例如:可以說我想要顯示圖表中的所有數據,所以我需要一次去所有的數據,那麼我應該如何繼續獲得順暢的體驗? – androider

+0

@yshooooo你正在使用什麼類型的圖表控件?你沒有在你的問題中提到它..請提及所有可能的信息,因爲這肯定會幫助我們給你一個正確的,有生產力的答案。 – Usman

0

之前使用「.ToList()」的意思是你的代碼仍然在模式‘的IQueryable’,並使用」 .ToList時() 「意味着你訪問物理數據庫。 您可以在LINQ上以「.Take(x)」和「.Page(y)」的方式獲取一些數據。你可以嘗試這種方法:

int page = 1; 
int size = 10 
var customers = tx.Customers 
       .Where(x => x.....) 
       .Skip((page - 1) * 10).Take(size) 
       .ToList();