没有为System.Data.SqlClient.SqlConnection和System.Data.SqlClient.SqlConnection定义运算符

时间:2010-04-19 18:04:32

标签: .net vb.net

我希望我在这里做错了。 理想情况下,我正在尝试打开连接,打开一个事务 针对此连接执行大量预先构建的sqlstatements(带参数) 然后关闭连接。理想情况下,所有都在同一批次。

将这一切包装在for循环中很容易,但是我想使用列表泛型的forEach函数来设置连接,因为它可能比我调用List.Item(i的实现速度快) )在循环中,但我得到一些奇怪的错误。

 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

这个错误究竟意味着什么?

2 个答案:

答案 0 :(得分:1)

只需使用标准的For Each循环

For Each cmd In sqlStatements
    cmd.Connection = conn
Next

答案 1 :(得分:0)

原因是VB.Net中的函数lambda(至少对于VB9)需要返回一个值。 lambda的部分读取

cmd.Connection = conn 

正在做比较,而不是作业。

这已经在VB10中发生了变化,因为他们添加了语句lambdas:

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

作为旁注,为什么你认为ForEach方法比传统的For Each循环更快?你真的遇到了性能问题吗?