0

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

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

        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");
        }

我的数据表应该看起来像

在此处输入图像描述

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

4

2 回答 2

3

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

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);
于 2013-10-30T10:30:11.450 回答
2

In addition to @lazyberezovsky's answer, I recommend you to use the DataRowCollection.Add Method (DataRow) method overload, which is 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);
}

If you intend to add the same rows to a new DataTable instance through your code, you might also get some performance improvement if you use the DataTable.Copy Method. Just create the rows above once in your code, then use the following to populate another datatable:

var dtMessageDetailsCopy = dtMessageDetails.Copy();
于 2013-10-30T10:41:59.583 回答