C# 使用linq替换datatable中的列值并获取datatable数据类型中的值

C# 使用linq替换datatable中的列值并获取datatable数据类型中的值,c#,vb.net,linq,C#,Vb.net,Linq,我有一个包含97列的datatable,在这97列中有一列(例如第20列),我必须向该特定行中的所有值添加一个字母(a)。如何使用linq实现这一点 我尝试将select代码分配给变量,但无法使用New With,因为我必须在数据行加载器方法中写入所有97列 是否有一种方法可以在使用newwith方法时动态添加所有列名 谢谢你的帮助 我还使用了: DT.AsEnumerable().Select(Function(r) cstr(r("Account")).Replace(cstr(r("Acc

我有一个包含97列的datatable,在这97列中有一列(例如第20列),我必须向该特定行中的所有值添加一个字母(a)。如何使用linq实现这一点

我尝试将select代码分配给变量,但无法使用New With,因为我必须在数据行加载器方法中写入所有97列

是否有一种方法可以在使用newwith方法时动态添加所有列名

谢谢你的帮助

我还使用了:

DT.AsEnumerable().Select(Function(r) cstr(r("Account")).Replace(cstr(r("Account")),"'"+cstr(r("Account"))) ).ToList)
使用此方法,但我得到一个列表。有没有方法可以将此列表值替换为列值?

这可能会对您有所帮助。 我在代码注释中写了一些信息

'In this mode you update the sixth row (only the column 20)
Dim query As EnumerableRowCollection(Of Object) = From dRow As DataRow In Dt.AsEnumerable()
                                                  Select col20 = dRow.Item(20)
                                                  Skip 5
                                                  Take 1



For Each Row As DataRow In query
    Row.Item(0) = "A"
Next


'In this mode you get all rows 
Dim queryAllRowData As EnumerableRowCollection(Of DataRow) = From dRow As DataRow In Dt.AsEnumerable()




For Each Row As DataRow In queryAllRowData
    Row.ItemArray = {"A", "A", "A", "A", "A", "A"} ' put here (or do any method to give) your 90 column data
Next





'Don't forget commit changes
Dt.AcceptChanges()

在for循环如此简单的情况下,在regex上浪费开发人员的时间有点愚蠢。毕竟正则表达式是在幕后进行循环的

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    For Each row As DataRow In dt.Rows
        row(3) = "A" & row(3).ToString
    Next
End Sub

一行中的所有值,或所有记录中的一列中的所有值?如果没有Linq,这将更容易,datareader可以使用indexhello@GertArnold一列中的所有值访问列!!你好@Luc你能告诉我更多关于datareader的信息吗?我还没有用过它。这闻起来像是糟糕的数据库设计。通过适当的规范化,您可能只修改了一条记录中的一个值。无论如何,不要使用LINQ进行此操作。只需从VB代码中执行一个简单的SQL update语句。如果要更新数据库,请不要调用
.AcceptChanges()
。您可以在更新后调用它。假定用户正在使用DB。现在还不清楚你想说什么,但看看这里:谢谢你花时间@G3nt\u M3caj,但正如我前面所说的,我不想对每个人都使用。没有“for”循环,就没有“Linq”或等效方法(我意识到你想在你的评论之后更改列的值)。因此,最好的解决方案是@Mary(errorhunter)提出的解决方案,而不会重复“Linq”的工作量。谢谢你的邀请reply@G3nt_M3caj调用
.AcceptChanges
更新
数据行
.RowState
,从而无法使用
数据适配器
更新数据库或通过
.RowState
手动拉出行并更新数据库。从您发布的链接“每个DataRow的RowState属性也会更改;添加和修改的行将保持不变,删除的行将被删除。”您确定了解用户的需求吗?如果您想更改该列的所有行,这是最好的解决方案,但是如果您想更改一行,我建议您使用正则表达式,因为windows库在C中,C处理内存的方式与vb.net不同,而且效率更高。调用不同的解决方案比您的“It's a little silly”hello@Mary有点傻。您的解决方案很棒,但我不想对每个解决方案都使用,因为记录要高得多,而且我需要很多时间才能获得所需的输出。这就是为什么我在寻找linq替代方案…@Vickydas time,在您弄清楚正则表达式之后。正则表达式甚至可能更慢。有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题。引用从我未能记录的人那里偷来的话。:-)@Vickydas直接更新数据库怎么样?让服务器来完成这项工作。