Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用其行索引vb.net更新datatable行_Vb.net_Linq_List_Datatable - Fatal编程技术网

使用其行索引vb.net更新datatable行

使用其行索引vb.net更新datatable行,vb.net,linq,list,datatable,Vb.net,Linq,List,Datatable,我有一个列为DisplayOrder的数据表。它将每个实体列的值递增1。在少数情况下,该增量会干扰。现在我需要更新DataTable以将DisplayOrder列值保持1 我尝试了以下代码。但它将所有行更新1 Dim i As Integer = 0 dtCustomers.Select("EntityID =" & EntityID).ToList().ForEach(Function(r) InlineAssignHelper(r("DisplayOrder"), i)) 我假设

我有一个列为
DisplayOrder
的数据表。它将每个实体列的值递增1。在少数情况下,该增量会干扰。现在我需要更新DataTable以将
DisplayOrder
列值保持1

我尝试了以下代码。但它将所有行更新1

Dim i As Integer = 0

dtCustomers.Select("EntityID =" & EntityID).ToList().ForEach(Function(r) InlineAssignHelper(r("DisplayOrder"), i))

我假设您的InlineAssignHelper接受第二个参数,并尝试设置列DisplayOrder的值。但在编写这段代码时,这是不可能的,因为您传递的是当前行的列DisplayOrder的值,而不是行本身的值。此外,您需要增加i的值,否则在调用DisplayOrder之外,您总是将值设置为0

出于所有这些原因(也为了更具可读性),我建议离开ForEach列表扩展,使用传统的循环

Dim rows = dtCustomers.Select("EntityID =" & EntityID)
if rows IsNot Nothing Then
   For x = 0 to rows.Length - 1
      InlineAssignHelper(rows(x), "DisplayOrder", x+1))
      ' At this point you can also directly set the column without an helper function
      ' rows(x)("DisplayOrder") = x+1
   Next
End If

Public Sub InlineAssignHelper(row As DataRow, colName as String, value As Integer)
     row(colName) = value
End Sub

有人能帮我一下吗?你能解释一下这个代码错在哪里并为InlineAssignHelper添加代码吗?使用上面的代码,“DisplayOrder”的所有行值都会更改为1如果看不到InlineAssignHelper的代码,很难说。你试过下面我的答案了吗?谢谢你的帮助!