2011-03-14 49 views
0

我有以下情況的速度問題:的LINQ LINQ的無數據庫往返:速度問題

的SQL Server數據庫託管在一個共享的主機環境,通過DSL 2M字節行訪問

有一個比賽結果表每個比賽持有32行。

當我在datagridview中顯示給定競爭的結果行時,我使用LINQ生成dgv數據源,然後添加一個額外的計算列。

爲什麼再添加一列? ** 由於Row1.extraColumn的值取決於Row1.Result的值進行比較,Row2.result **

我寫道:

dim mainQuery = from c in competResults 
       where competID = xxx 
       select c.resultID, c.resultPosition, c.result 

dataGridView1.datasource = mainQuery.ToList 

'Prepare and add Exrta Column 

dataGridView1.ADD額外的列

記住dgv只有32行... 只有 ...

使用LINQ我有這樣的子查詢:

dim rowA = from q in mainQuery where rowNumber = xxx select q 
dim rowB = from q in mainQuery where rowNumber = yyy select q 

進行計算和DGV內寫結果,如:

for each R in dgv.rows 
    if R.cells("rowNumber").value = rowA.RowNumber then R.cells("ExtraColumn)).value = some result 
    if R.cells("rowNumber").value = rowB.Rownumber then R.cells("ExtraColumn)).value = some result 
next 

而這需要大約30秒到1分鐘

我想LINQ不會回去在查詢結果已被搜索的查詢時查詢數據庫(當我執行dataGridView1.datasource = CResults.ToList時)。

當然,我可以做的工作通過DGV行迭代,但我更喜歡使用LINQ ...

任何暗示歡迎...

回答

2

爲了確保執行一次查詢只有和mainQuery是本地的,將您的第一個查詢更改爲:

dim mainQuery = (from c in competResults 
       where competID = xxx 
       select c.resultID, c.resultPosition, c.result).ToList() 
+1

+1現在'mainQuery'不包含結果。它是一個將獲取結果的生成器(工作中的延遲執行)。這將執行查詢,並實際上將'mainQuery'轉換爲結果列表。 – diceguyd30 2011-03-14 17:17:31

+0

@ diceguyd30 - 很好的解釋:) – 2011-03-14 19:28:11

+0

Tjis像一個魅力工作,我回到了LINQ魔術!下來形式1分鐘到3秒!!! – 2011-03-14 21:02:46