使用相同的数据将多行添加到数据表中而不进行循环

时间:2013-10-30 10:10:28

标签: c# linq

有没有办法在没有循环的情况下添加具有相同内容的多行?

以下是我目前用来实现此目的的代码。

        DataTable dtMessageDetails = new DataTable("Private Message Details");
        for (int i = 0; i < 10; i++)
        {
            dtMessageDetails.Rows.Add("65E6BD38-2806-S15G-9DC5-9DE908333996", 3, 0, "News", "News", Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")), "Publish", "mes", 0, 0, 0, "null", "null", "Active");
        }

我的数据表看起来应该是

enter image description here

我想用其他方法替换循环可能是LINQ。

2 个答案:

答案 0 :(得分:3)

Linq用于查询数据,而不是用于插入。您可以使用linq准备数据,但是您将使用相同的循环来添加行,这将不会更快。因此,您正在插入相同的数据,我建议您准备这些数据,而不是在每次迭代时创建新的项目数组:

DataTable dtMessageDetails = new DataTable("Private Message Details");
object[] items = { "65E6BD38-2806-S15G-9DC5-9DE908333996", 3, 0, "News", "News", 
                   Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")), 
                   "Publish", "mes", 0, 0, 0, "null", "null", "Active" };

for (int i = 0; i < 10; i++)    
    dtMessageDetails.Rows.Add(items);

答案 1 :(得分:2)

除了@ lazyberezovsky的回答,我建议你使用DataRowCollection.Add Method (DataRow)方法重载,slightly faster

var itemArray = new object[] { 
    "65E6BD38-2806-S15G-9DC5-9DE908333996", 3, 0, "News", "News", 
    Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")),
    "Publish", "mes", 0, 0, 0, "null", "null", "Active" };

for (int i = 0; i < 10000; i++)
{
    var r = dtMessageDetails.NewRow();
    r.ItemArray = itemArray;
    dtMessageDetails.Rows.Add(r);
}

如果您打算通过代码将相同的行添加到新的DataTable实例,那么如果您使用DataTable.Copy Method,也可能会提高性能。只需在代码中创建一次上面的行,然后使用以下内容填充另一个数据表:

var dtMessageDetailsCopy = dtMessageDetails.Copy();