为没有for循环的数据表中的所有行设置值

问题描述 投票:9回答:4

我正在尝试为数据表中的单个列设置所有行的相同值,而不使用for循环。任何人都可以建议任何更快的方法来实现相同。

.net vb.net datatable for-loop
4个回答
10
投票

除非你算foreach。无论如何,你需要循环。

如果你使用DataTable版本,最快的方法是使用DataColumn访问器,即

var col = table.Columns["Foo"];
foreach(var row in table.Rows)
    row[col] = value;

作为替代方案:因为这可能与数据库有关,所以手动编写TSQL以适当地设置所有值(即在TSQL中使用合适的where子句)。

update [theTable]
set [theColumn] = theValue
where --TODO - something sensible

14
投票

是的,这是可能的,即使没有循环!这可以使用Expression属性来完成。请记住,应该引用字符串值,否则它会将其视为另一个columnname.1

这将使用字符串值a设置列'col1':

preview.Columns["col1"].Expression = "'a'";

这将在'col1'中显示'col2'列的值:

preview.Columns["col1"].Expression = "col2";

4
投票

您是否考虑过删除并重新添加具有默认值的列?

dt.Columns.Remove("FilterText")
dt.Columns.Add(New DataColumn() With {.ColumnName = "FilterText",
                                      .DataType = GetType(String),
                                      .DefaultValue = "Jam and chips"})

(假设您的列名是FilterText,并且您想将其设置为“Jam and chips”)


0
投票

我遇到了这种类型的问题,其中选择全部复选框用于将列“sel”设置为1或0,foreach循环非常慢,我从@Jonathan回答这个想法更快,但有一些由于With子句在c#中不起作用的微小修改

dtEmpList.Columns.Remove("sel");
dtEmpList.Columns.Add(new DataColumn("sel",typeof(bool)(chkSelectAll.Checked ? "1" : "0")));
© www.soinside.com 2019 - 2024. All rights reserved.