C# 如何使用c将db结果加载到对象中,而不使用out循环
我正在尝试将db结果存储到对象中 能给我一些建议如何储存吗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
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();