我如何通过查询在 C# 中创建一个 "dynamic" 列表,其属性命名为 SQL 服务器 table 的列

How can I create a "dynamic" list in C# from query with properties named like columns of a SQL Server table

我想试试这个:每次执行查询时,我想自动创建一个对象列表,对象的每个 属性 必须与 [= 的列名相同32=].

像这样:

my_Sql_table:

code number brand
001 43 qwe
002 721 plo

我的 C# 控制器:

SqlConnection sqlConn = new SqlConnection();

SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConn;
cmd.CommandText = "select  * from my_Sql_table";
cmd.CommandType = CommandType.Text;

sqlConn.ConnectionString = _configuration["dbConnectionString"];

using (sqlConn)
{
     sqlConn.Open();

     SqlDataReader reader = cmd.ExecuteReader();

     while (reader.Read())
     {
         // the code here
     }
}

在 C# 中,我的结果是这样的:

myList:

[0] code: "001", number: "43", brand: "qwe"
[1] ....

现在假设有很多查询要处理大量列,我的目标不是创建那么多模型,而是在使用 javascript.

时更轻松地读取属性

您可能想根据您的输出格式更改它,但这是关于如何获得结果的想法。我将 Dictionary 与 ExpandoObject 一起使用来覆盖变量分配的限制。也尝试实现 DataTable 而不是直接从 SqlDataReader 读取,因为这往往会导致问题。

using System.Dynamic;

    private IEnumerable<ExpandoObject> GetQueryToList()
    {
    SqlConnection sqlConn = new SqlConnection();

SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConn;
cmd.CommandText = "select  * from my_Sql_table";
cmd.CommandType = CommandType.Text;

sqlConn.ConnectionString = _configuration["dbConnectionString"];

using (sqlConn)
{   
     var list = new List<ExpandoObject>(); 
     sqlConn.Open();

     SqlDataReader reader = cmd.ExecuteReader();

     while (reader.Read())
     {
     var expandoObject = new ExpandoObject();
     for (var i = 0; i<reader.FieldCount; i++)
     {
     ((IDictionary<string, object>) expandoObject).Add(
     reader.GetName(i), reader[i]);
            }
     list.Add(expandoObject);
     }
}