C# 如何使用c将db结果加载到对象中,而不使用out循环

C# 如何使用c将db结果加载到对象中,而不使用out循环,c#,C#,我正在尝试将db结果存储到对象中 能给我一些建议如何储存吗 using (SQLiteConnection connection = new SQLiteConnection(pluginManager.ConnectionString)) { string sql = "SELECT * from contacts ;"; connection.Open(); SQLiteCommand command = new SQLiteCommand(sql, connecti

我正在尝试将db结果存储到对象中

能给我一些建议如何储存吗

using (SQLiteConnection connection = new SQLiteConnection(pluginManager.ConnectionString))
{
    string sql = "SELECT * from contacts ;";
    connection.Open();
    SQLiteCommand command = new SQLiteCommand(sql, connection);
    SQLiteDataReader dr;

    dr = command.ExecuteReader();
    var dt = new DataTable();
    dt.Load(dr);

    int rows = dt.Rows.Count;

    var contactData = new object[rows, 42];

    dr.Close();
    connection.Close();
}
我想在不使用任何循环的情况下将dr/dt结果转储到contactData中

我已经完成了以下收集工作,这需要时间

List<contact> contacts = new List<contact>();

foreach (var contact in contacts)
{               
    contactData[counter, 0] = contact.first_name;
    contactData[counter, 1] = contact.last_name;
    contactData[counter, 2] = contact.email;
    contactData[counter, 3] = contact.alternate_email;
    contactData[counter, 4] = contact.title;
    contactData[counter, 5] = contact.department;
    contactData[counter, 6] = contact.contact_number;
    contactData[counter, 7] = contact.fax_number;
    contactData[counter, 8] = contact.website;
    contactData[counter, 9] = contact.company_name;
    contactData[counter, 10] = contact.revenue;
    contactData[counter, 11] = contact.team_size;
    contactData[counter, 12] = contact.bed_count;
}

所以我根本不想做循环

好吧,就是这样做的。另一种方法是使用类似于ORM的EntityFramework,这将允许您从数据库中准备好对象

ORM是对象-关系映射-基本上,框架自动从数据库转换列。您可以编写如下内容,而不是循环:

using(var db = new MyContext())
{
   var contacts = db.Contact.ToArray(); // that takes all records
}

所以,正如您所看到的,代码中没有循环。请注意,处理大数据集总是需要时间。

使用Dapper.Net。这是一种高性能的微型ORM

第一:创建与数据库记录匹配的联系人类

   public class Contact
    {
        public string last_name {get;set;}
        public string email {get;set;}
        public string alternate_email {get;set;}
        public string title {get;set;}
        public string department {get;set;}
        // rest of properties .....

    }
第二:呼叫查询:

更新:

替代解决方案:使用linq

     List<Contact> contactList = new List<Contact>();  
    contactList = (from DataRow dr in dt.Rows  
            select new Contact()  
            {  
                last_name =dr["last_name"],  
                email = dr["email"].ToString(),  
                alternate_email = dr["alternate_email"].ToString(),  
               //... rest of properties
            }).ToList();  

如果您知道将结果存储在object中的解决方案,您可以建议我使用Linq作为循环的替代方案,但这只是为您执行循环。对于二维阵列来说,这是不可能的。我知道如何使用linq和循环来存储数据,但如果数据有15000条记录,这需要时间。我只想直接转储数据而不进行外循环。因此,我建议不要使用DataTable,而是从读卡器中循环结果,并将它们直接放入所需的集合中,最好是一个表示表中数据的自定义类列表。从DB中提取数千条记录需要时间。除了限制你必须拉的东西之外,没有什么灵丹妙药可以解决这个问题。最好用更多的细节和链接来详细说明你的答案。尽管你的建议很好,但答案是没有帮助的,因为人们必须充分研究EF
     List<Contact> contactList = new List<Contact>();  
    contactList = (from DataRow dr in dt.Rows  
            select new Contact()  
            {  
                last_name =dr["last_name"],  
                email = dr["email"].ToString(),  
                alternate_email = dr["alternate_email"].ToString(),  
               //... rest of properties
            }).ToList();