我希望我在这里做错了。 理想情况下,我正在尝试打开连接,打开一个事务 针对此连接执行大量预先构建的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
这个错误究竟意味着什么?
答案 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循环更快?你真的遇到了性能问题吗?