首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将List<X>转换为DBDataReader

将List<X>转换为DBDataReader
EN

Stack Overflow用户
提问于 2019-04-28 20:39:51
回答 2查看 77关注 0票数 2

如何将List<Person> personList转换为DBDataReader

在下面给出的代码中,我尝试批量插入personList。我有大约500k条记录,方法WriteToServer需要一个DBDataReader,而我有一个List<Person>。如何将List<Person>转换为DBDataReader

代码语言:javascript
运行
复制
using (SqlBulkCopy bc= new SqlBulkCopy(constr)) {
      bc.DestinationTableName = "MyPersonTable";
       try
       {
             bc.WriteToServer(personList);
       }
       catch (Exception ex)
       {
             Console.WriteLine(ex.Message);
       }
}\

\

代码语言:javascript
运行
复制
**Person Model**

public int personId {get;set;} // Primarykey
public string personName {get;set;} 
public int personAge {get;set;} 
public DateTime personCreatedDate {get;set;} 
EN

回答 2

Stack Overflow用户

发布于 2019-04-28 20:54:28

您可以使用此命令,然后使用SqlBulkCopy将所有数据插入数据库:

代码语言:javascript
运行
复制
 IList<Name> list = new List<Name>();
    list.Add(new Name{ Forename="Bert", Surname="Fred"});

    list.Add(new Name { Forename = "John", Surname = "Smith" });
    DataTable table = new DataTable();
    table.Columns.Add("Forename");
    table.Columns.Add("Surname");

    foreach (Name item in list)
    {
        var row = table.NewRow();

        row["Forename"] = item.Forename;
        row["Surname"] = item.Surname;

        table.Rows.Add(row);
    }
票数 0
EN

Stack Overflow用户

发布于 2019-04-28 21:24:49

下面是创建表的一般方法。

还有另一种方法可以做到这一点,即创建一个继承自IDataReader的自定义类,如果您对它感兴趣,请随意讲述。

无论如何,看看下面,这是一种方法。

代码语言:javascript
运行
复制
public static DataTable MakeTable(this List<object> o)
{
  var data = new DataTable();
  var props = o.FirstOrDefault()?.GetType().GetProperties();
  if (props == null)
      return data;
  forEach(var p in props){
        DataColumn c = new DataColumn();
        c.DataType = p.PropertyType;
        c.ColumnName = p.Name;
        // c.AutoIncrement = true; // if this is a primaryKey 
        data.Columns.Add(c);
  }

  forEach(var item in o){
    var row = data.NewRow();
    forEach(var p in props){
     row[p.Name] = p.GetValue(item);
     }
     data.Rows.Add(row);
  }
  return data;
}
   // now all you need is to call MakeTable
   using (SqlBulkCopy bc= new SqlBulkCopy(constr)) {
      bc.DestinationTableName = "MyPersonTable";
       try
       {
             bc.WriteToServer(personList.MakeTable());
       }
       catch (Exception ex)
       {
             Console.WriteLine(ex.Message);
       }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55890336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档