2010-04-19 120 views
0

我希望我只是在這裏做錯了什麼。 理想情況下,我試圖打開連接,打開一個事務 對此連接執行大量預建sql語句(帶參數) 然後關閉連接。理想情況下全部在同一批中。運算符未定義爲System.Data.SqlClient.SqlConnection和System.Data.SqlClient.SqlConnection

很容易把這一切都包裝在一個for循環中,但是我想使用列表泛型的forEach函數來設置連接,因爲它可能比我調用List.Item的實現更快我)在循環中,但我得到一些奇怪的錯誤。

Dim sqlStatements As List(Of SqlCommand) = New List(Of SqlCommand)   
Dim conn As SqlClient.SqlConnection = New SqlConnection("...") 



sqlStatements.Item(0).Connection = conn 
'Works 

sqlStatements.ForEach(Function(ByRef cmd As SqlCommand) cmd.Connection = conn) 
'ERROR: Operator '=' is not defined for types 
     'System.Data.SqlClient.SqlConnection'   
     'and 'System.Data.SqlClient.SqlConnection 

這個錯誤究竟是什麼意思?

回答

0

的原因是(至少對於VB9),其功能拉姆達在VB.Net必須返回一個值。讀取的lambda部分爲

cmd.Connection = conn 

正在做比較而不是分配。

這VB10已經改變,因爲他們增加了lambda表達式:

sqlStatements.ForEach(Sub(cmd) cmd.Connection = conn)) '(my syntax may be off) 

作爲一個側面說明,爲什麼你認爲給ForEach方法會比傳統的For Each循環更快?你真的遇到了性能問題嗎?

+0

不,我沒有真正測試過,所以我只是在猜測List.ForEach實現會更快。我的想法是基於這樣的假設,即ForEach包含在List * generic *中,並且可能在某處提供某些好處。 謝謝。這告訴我我需要知道什麼。 – Beta033 2010-04-21 18:44:39

1

只需使用標準For Each循環

For Each cmd In sqlStatements 
    cmd.Connection = conn 
Next 
+0

是的,這工作,但沒有解釋爲什麼列表泛型forEach有麻煩,這是我最終與此一起去。 – Beta033 2010-04-19 22:44:37

相關問題