一行多列的DataSet数据集如何转换为数组

sinat_38190872 2017-05-01 11:55:08
我现在SQL语句取出的数据如下:

把它取到后台之后,需要转换成一维数组
DataSet DS1;
Access_DataBase logtxtmh = new Access_DataBase();
DS1 = logtxtmh.ifxToDS("SELECT * FROM logtxtmh");
//???需要将数据集DS1 转换为数组strArr??


Response.Write();
Response.End();
}
}

最终转换的数组要类似[1,2,3,4,5,6,7,8,9,10,11,12]这种,我在前台用ajax接收然后画echarts柱状图的

本人小白,希望各位高手讲清楚一点,谢谢了
...全文
542 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
romanticcrystal 2017-05-04
  • 打赏
  • 举报
回复
JsonConvert.SerializeObject(table)
guanyelong 2017-05-04
  • 打赏
  • 举报
回复

IList<tb_Class> list = ModelConvertHelper<tb_Class>.ConvertToModel(dt);

/// <summary>
    /// DataTable与实体类互相转换
    /// </summary>
    /// <typeparam name="T">实体类</typeparam>
    public class ModelHandler<T> where T : new()
    {
        #region DataTable转换成实体类

        /// <summary>
        /// 填充对象列表:用DataSet的第一个表填充实体类
        /// </summary>
        /// <param name="ds">DataSet</param>
        /// <returns></returns>
        public List<T> FillModel(DataSet ds)
        {
            if (ds == null || ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0)
            {
                return null;
            }
            else
            {
                return FillModel(ds.Tables[0]);
            }
        }

        /// <summary>  
        /// 填充对象列表:用DataSet的第index个表填充实体类
        /// </summary>  
        public List<T> FillModel(DataSet ds, int index)
        {
            if (ds == null || ds.Tables.Count <= index || ds.Tables[index].Rows.Count == 0)
            {
                return null;
            }
            else
            {
                return FillModel(ds.Tables[index]);
            }
        }

        /// <summary>  
        /// 填充对象列表:用DataTable填充实体类
        /// </summary>  
        public List<T> FillModel(DataTable dt)
        {
            if (dt == null || dt.Rows.Count == 0)
            {
                return null;
            }
            List<T> modelList = new List<T>();
            foreach (DataRow dr in dt.Rows)
            {
                //T model = (T)Activator.CreateInstance(typeof(T));  
                T model = new T();
                for (int i = 0; i < dr.Table.Columns.Count; i++)
                {
                    PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
                    if (propertyInfo != null && dr[i] != DBNull.Value)
                        propertyInfo.SetValue(model, dr[i], null);
                }

                modelList.Add(model);
            }
            return modelList;
        }

        /// <summary>  
        /// 填充对象:用DataRow填充实体类
        /// </summary>  
        public T FillModel(DataRow dr)
        {
            if (dr == null)
            {
                return default(T);
            }

            //T model = (T)Activator.CreateInstance(typeof(T));  
            T model = new T();

            for (int i = 0; i < dr.Table.Columns.Count; i++)
            {
                PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
                if (propertyInfo != null && dr[i] != DBNull.Value)
                    propertyInfo.SetValue(model, dr[i], null);
            }
            return model;
        }

        #endregion

        #region 实体类转换成DataTable

        /// <summary>
        /// 实体类转换成DataSet
        /// </summary>
        /// <param name="modelList">实体类列表</param>
        /// <returns></returns>
        public DataSet FillDataSet(List<T> modelList)
        {
            if (modelList == null || modelList.Count == 0)
            {
                return null;
            }
            else
            {
                DataSet ds = new DataSet();
                ds.Tables.Add(FillDataTable(modelList));
                return ds;
            }
        }

        /// <summary>
        /// 实体类转换成DataTable
        /// </summary>
        /// <param name="modelList">实体类列表</param>
        /// <returns></returns>
        public DataTable FillDataTable(List<T> modelList)
        {
            if (modelList == null || modelList.Count == 0)
            {
                return null;
            }
            DataTable dt = CreateData(modelList[0]);

            foreach (T model in modelList)
            {
                DataRow dataRow = dt.NewRow();
                foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
                {
                    dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
                }
                dt.Rows.Add(dataRow);
            }
            return dt;
        }

        /// <summary>
        /// 根据实体类得到表结构
        /// </summary>
        /// <param name="model">实体类</param>
        /// <returns></returns>
        private DataTable CreateData(T model)
        {
            DataTable dataTable = new DataTable(typeof(T).Name);
            foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
            {
                dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
            }
            return dataTable;
        }

        #endregion
    }
zhujinqiang 2017-05-04
  • 打赏
  • 举报
回复
引用 3 楼 skc_6 的回复:
思路: 1. 想要什么样的Json? 2. 如何拼接出这样的Json? 2-1. 拼接这样的Json需要什么条件? (列名+列值) OR (列值)

string strJson = string.Empty;
if(DS1.Tables[0].Rows.Count > 0)
{
    strJson = "[";
    for (int i = 0; i < DS1.Tables[0].Columns.Count; i++)
    {
        strJson += DS1.Tables[0][i].ToString() + ",";
    }
   strJson = strJson.SubString(0, strJson.Length - 1) + "]";
}
应该就是这样子的喽。
我居然看懂了
insus 2017-05-03
  • 打赏
  • 举报
回复
最好维护与实现,你可以写一个model: 然后DataTable转换为IEnumerable<T>就行了。
正怒月神 版主 2017-05-03
  • 打赏
  • 举报
回复
楼上的都对, 就是遍历放入数组
全栈极简 2017-05-03
  • 打赏
  • 举报
回复
遍历dataset的columns的列,然后for循环,拼接到array。
skc6 2017-05-03
  • 打赏
  • 举报
回复
思路: 1. 想要什么样的Json? 2. 如何拼接出这样的Json? 2-1. 拼接这样的Json需要什么条件? (列名+列值) OR (列值)

string strJson = string.Empty;
if(DS1.Tables[0].Rows.Count > 0)
{
    strJson = "[";
    for (int i = 0; i < DS1.Tables[0].Columns.Count; i++)
    {
        strJson += DS1.Tables[0][i].ToString() + ",";
    }
   strJson = strJson.SubString(0, strJson.Length - 1) + "]";
}
应该就是这样子的喽。
  • 打赏
  • 举报
回复
如果某个字符写错了,自己改一下吧。 你温习一下 for 语句怎么写,DataTable 的某行某列怎么读取,自己把基本知识重学几遍。
  • 打赏
  • 举报
回复
假设列标题如你贴出的那样,那么可以写类似这样的代码
var arr= new int[12];
var dr = dataTable.Rows[0];
for(var i=0; i< arr.Length; ++i)
    arr[i] = (int)dr[ "d"+ (i+1),ToString()];
         

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧