将动态输出转换为通用列表List <t> </t>

时间:2013-09-25 19:13:49

标签: c# dynamic arraylist ado.net generic-list

我从SQL Server获得具有可变列名的动态列数的查询结果。 如何将datareader的结果转换为通用列表List?

 public ? getItems(string orderId)
    {

        SqlConnection sqlConn = new SqlConnection(conn);
        SqlCommand command = new SqlCommand();
        SqlDataReader reader;
        try
        {
            sqlConn.Open();
            command.Connection = sqlConn;
            command.CommandText = "usp_get_orders";
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add(new SqlParameter("@Id", orderId)));

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {

                ?
            }

            reader.Close();
        }
        catch (Exception exp)
        {

        }
        finally
        {

            command.Dispose();
            command1.Dispose();
            sqlConn.Close();
            sqlConn.Dispose();
        }

        return ?;
    }

1 个答案:

答案 0 :(得分:1)

如果结果对象是完全动态的,则可以使用字典而不是强类型对象。或者,如果您至少想要一个对象,请使用动态对象。使用dynamic关键字和List<dynamic>或使用DynamicObject。 字典的差异并不是那么大......

这样的事情可以做到:

SqlDataReader reader = command.ExecuteReader();
var listOfValues = new Dictionary<string, object>();
while (reader.Read())
{
   for(int i = 0; i <reader.FieldCount;i++)
   {
      listOfValues.Add(reader.GetName(i), reader.GetValue(i));
   }
}