【问题标题】:Update multiple rows in datatable without loop在没有循环的情况下更新数据表中的多行
【发布时间】:2013-09-20 17:26:24
【问题描述】:

我在应用程序中有两个带有条件的数据表,并希望对多行进行一些处理以更新列值。

例如:

我有 10000 行的 datatable1。我想通过 datatable.select("condition") 过滤行,并根据条件更新行值。

如果有任何条件,我从数据表中找到 20 行。我想一口气更新这 20 条记录。不在任何循环中。我有数据行数组,这些值要在数据表中更新。

【问题讨论】:

  • 您究竟想如何更新行?这似乎是您可以使用 in 关键字对动态查询执行的操作。
  • 你认为没有循环如何做到这一点?如果框架提供了一些方法,它也会在内部做一个循环!
  • 也许他的意思是 lambda 表达式.. 但无论如何都会有一个循环
  • @Sriram - 是的,我知道但更好的方法或任何我不知道的方法!这就是我发布问题的原因。
  • @darkdog - 感谢您的理解。我正在寻找类似的东西。

标签: c# asp.net datatable


【解决方案1】:

你可以试试下面的linq,

DataTable recTable = new DataTable();

// do stuff to populate table

recTable.Select(string.Format("[code] = '{0}'", someName)).ToList<DataRow>().ForEach(r => r["Color"] = colorValue);

您可以在此处替换列和值...

【讨论】:

  • Loop 远比这个高效
  • 这只是一种在不使用外部循环的情况下进行更新的方法。如果性能是一个限制因素,那么选择 Parallel For。
  • 感谢您的意见和建议。
  • string.Format("[Code]='{0}'",somename) 这里的代码是什么,somename 是什么。你在更新代码的值吗
【解决方案2】:

要使用多个条件更新行,请使用此

    datatable.Select(string.Format("[lineNo]='{0}' and [Position]>='{1}' ", lineNo, Position)).ToList<DataRow>().ForEach(r => r["Linetext"] ="Sample Text" );

【讨论】:

  • 这只是一种更奇特的循环方式——注意'ForEach(...)'
【解决方案3】:

如果您想使用 abc 使用 Expression 来默认列值,那么您可以使用以下代码。

dt.Columns.Add("ColumnName").Expression = "'abc'";

如果您需要使用变量动态传递值,您可以使用以下代码。

string str = "abc";
dt.Columns.Add("ColumnName").Expression = "'" + str + "'";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2023-03-25
    • 2021-11-12
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多