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

时间:2011-02-21 07:58:02

标签: .net vb.net datatable for-loop

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

5 个答案:

答案 0 :(得分:14)

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

这会将列'col1'设置为字符串值a

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

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

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

答案 1 :(得分: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

答案 2 :(得分:4)

您是否考虑过使用默认值删除并重新添加列?

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

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

答案 3 :(得分:0)

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

中不起作用,因此进行了一些小的修改
dtEmpList.Columns.Remove("sel");
dtEmpList.Columns.Add(new DataColumn("sel",typeof(bool)(chkSelectAll.Checked ? "1" : "0")));

答案 4 :(得分:0)

IWrapper<ISnack> wrappedSnack = new CheeseCakeContainer();
var c1 = new CheeseCake();
wrappedSnack.Wrap(c1);

public interface ISnack { }
public interface IWrapper<out TSnack> where TSnack : ISnack
{
    void Wrap(ISnack snack);
}

public class CheeseCakeContainer : IWrapper<CheeseCake>
{
    public void Wrap(ISnack snack)
    {
        ((CheeseCake)snack).Type = "Strawberry";
    }
}

public class CheeseCake : ISnack
{
    public string Type { get; set; }
}