2010-04-19 93 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

相关问题