C#不使用任何框架将SQL数据转换为列表

C#不使用任何框架将SQL数据转换为列表,c#,sql,C#,Sql,我正在将数据从sql转换为PersonModel列表。但我的问题是:有没有一种更快的方法(更少的代码)可以在不使用任何框架/简洁的情况下完成这项工作LINQ是允许的。 (目前代码运行良好,但可能可以用更简单的方式完成) 这是我现在掌握的代码: public List<PersonModel> GetPerson_All() { var people = new List<PersonModel>(); //Get the connectionString

我正在将数据从sql转换为PersonModel列表。但我的问题是:有没有一种更快的方法(更少的代码)可以在不使用任何框架/简洁的情况下完成这项工作LINQ是允许的。

(目前代码运行良好,但可能可以用更简单的方式完成)

这是我现在掌握的代码:

public List<PersonModel> GetPerson_All()
{
    var people = new List<PersonModel>();

    //Get the connectionString from appconfig
    using (var connection = new SqlConnection(GlobalConfig.CnnString(db)))
    {
        connection.Open();

        //Using the stored procedure in the database.
        using (var command = new SqlCommand("dbo.spPeople_GetAll", connection))
        {
            using (var reader = command.ExecuteReader())
            {
                //With a while loop, going trough each row to put all the data in the PersonModel class.
                while (reader.Read())
                {
                    var person = new PersonModel();

                    person.Id = (int)reader["Id"];
                    person.FirstName = (string) reader["FirstName"];
                    person.LastName = (string)reader["LastName"];
                    person.EmailAdress = (string)reader["EmailAddress"];
                    person.CellphoneNumber = (string)reader["CellphoneNumber"];

                    //Add the data into a list of PersoModel
                    people.Add(person);
                }
            }
        }
    }

    return people;
}
public List GetPerson\u All()
{
var people=新列表();
//从appconfig获取connectionString
使用(var connection=newsqlconnection(GlobalConfig.CnnString(db)))
{
connection.Open();
//使用数据库中的存储过程。
使用(var命令=新的SqlCommand(“dbo.spPeople_GetAll”,连接))
{
使用(var reader=command.ExecuteReader())
{
//使用while循环,遍历每一行,将所有数据放入PersonModel类中。
while(reader.Read())
{
var person=newpersonmodel();
person.Id=(int)读卡器[“Id”];
person.FirstName=(字符串)读取器[“FirstName”];
person.LastName=(字符串)读取器[“LastName”];
person.EmailAddress=(字符串)读卡器[“EmailAddress”];
person.CellphoneNumber=(字符串)读取器[“CellphoneNumber”];
//将数据添加到PersoModel列表中
人。添加(人);
}
}
}
}
还人,;
}
使用(dapper),您可以将所有数据以中间方式放入列表中。这样的事情没有整洁就可能发生吗

public List<PersonModel> GetPerson_All()
{
    List<PersonModel> output;
    using (var connection = new SqlConnection(GlobalConfig.CnnString(db)))
    {
        output = connection.Query<PersonModel>("dbo.spPeople_GetAll").ToList();
    }
    return output;
}
public List GetPerson\u All()
{
列表输出;
使用(var connection=newsqlconnection(GlobalConfig.CnnString(db)))
{
output=connection.Query(“dbo.spPeople_GetAll”).ToList();
}
返回输出;
}

不,没有比使用Dapper或Entity Framework这样的方法或映射库更好的方法了:这就是这些库存在的全部原因


如果您有这样重复的代码块,但不想使用外部库,您可以尝试将其重构为执行语句、迭代结果、实例化和填充对象的方法。

可能更适合这个问题为什么您认为像Dapper这样的库存在?正是为了减少这样的样板代码。SQL查询(问题中的存储过程)是例程的瓶颈;这就是为什么任何其他实现都不会太多faster@JeroenMostert我知道?但是我不允许使用这样的东西dapper@Alegou20:您始终可以编写自己的micro-ORM
T映射(DataReader),其中T:new
使用反射从
DataReader
创建并初始化新对象。这只是几行代码。然而,它的速度非常慢——优化它会产生更多的代码,甚至可以把它变成一个库并称之为Dapper。