如,我有一个方法
List<object> GetList(DataTable dt);他实现的功能为,比如现在传入table
//现在有数据
//ID Name Sex
//1 Jerry 男
//2 Ruy 男
//3 Ken 女
那么他返回
List<object> list = new List<object>();
list.Add(new { ID = 1, Name = "Jerry", Sex = "男" });
list.Add(new { ID = 2, Name = "Ruy", Sex = "男" });
list.Add(new { ID = 3, Name = "Ken", Sex = "女" });比如再传入Table
ID Class Name
A 一 龙
B 二 春丽
C 三 豪鬼
那么他返回
new {ID = "A", Class = "一", Name = "龙"}
new {ID = "B", Class = "二", Name = "春丽"}
new {ID = "C", Class = "三", Name = "豪鬼"}
-------------------------------------------------------
也就是动态的根据一个Table转换成一个list<object>对像,格式就像我上面的
谢谢
List<object> GetList(DataTable dt);他实现的功能为,比如现在传入table
//现在有数据
//ID Name Sex
//1 Jerry 男
//2 Ruy 男
//3 Ken 女
那么他返回
List<object> list = new List<object>();
list.Add(new { ID = 1, Name = "Jerry", Sex = "男" });
list.Add(new { ID = 2, Name = "Ruy", Sex = "男" });
list.Add(new { ID = 3, Name = "Ken", Sex = "女" });比如再传入Table
ID Class Name
A 一 龙
B 二 春丽
C 三 豪鬼
那么他返回
new {ID = "A", Class = "一", Name = "龙"}
new {ID = "B", Class = "二", Name = "春丽"}
new {ID = "C", Class = "三", Name = "豪鬼"}
-------------------------------------------------------
也就是动态的根据一个Table转换成一个list<object>对像,格式就像我上面的
谢谢
解决方案 »
- asp.net做的网站,如何避免软件恶意访问
- 关于黑冰防火墙
- 很奇怪的一个sql语句问题....没查出错在哪,请帮忙,,急~~~
- 急求一个asp.net论坛
- 动态更改web.config中数据库连接的问题,怎么做四个输入框分别让用户输入server,database,uid,pwd的值然后提交就可更新数据库连接,(xml不
- 在asp.net中列的那项设置等于SqlDbType.Int
- TextBox.Text这个属性.是如何知道我输入的值的?
- 如何设置Gridview的Headtext?
- 急100分请问如何在aspx中调用.vb里的自定义类,谢谢
- 如何将一个DataTable中存有的前5行信息取出来存到另一个DataTable中????????????
- 一段代码,想不通怎么回事???????
- VS2008无法调试脚本程序怎么回事???
我现在不会的是,如何来创建这么一个
new {ID = "A", Class = "一", Name = "龙"}
对像
谢谢
不懂,
等待学习...创建一个这样的对象..
不能用类么?? 3个属性 在getset封装
- =!
不懂,
等待学习... 创建一个这样的对象..
不能用类么?? 3个属性 在getset封装
---------------------------------
那如果是这样的话,那我不是得预知我会传入哪些table了,问题是我不能确定我传入的table的结构
获取传入的datatable的行列数循环读取添加不行么?
---------------------------------
这里的难点不在数据赋值
而是如何来创建这个对像
谢谢
可以试试,然后根据获取的列名,在动态创建object的对象
写了点代码,供大家批评指点。
public List<Dictionary<string, string>> GetList(DataTable table)
{
List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
Dictionary<string, string> dic = dic = new Dictionary<string, string>();
for (int i = 0; i < table.Rows.Count; i++)
{
for (int j = 0; j < table.Columns.Count; j++)
{
dic.Add(table.Columns[j].ColumnName, table.Rows[i][j].ToString());
}
list.Add(dic);
dic = new Dictionary<string, string>();
}
return list;
}我没放在object里,放在了Dictionary<string, string>,方便索引,减少装箱拆箱。
使用的时候GetList(table)[行号][列名]
Dictionary 只是用来做字典,只有key value 对我多个字段就不行了RE:小弟愚昧,实在想不太明白,把DataTable放在object对象里的用途是什么,为了存放么
-------
我也不知道有什么用,突然间想到来转的,但是却想不出怎么来转就放上来了谢谢
"1"
list[0]["Sex"]
"男"
list[0]["Name"]
"Jerry"这个不就可以对你多个字段么?楼主再讲讲,我真的糊涂
private DataTable GetDT()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(String)));
dt.Columns.Add(new DataColumn("Sex", typeof(String)));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "A";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "B";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "C";
dr[2] = "女";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 4;
dr[1] = "D";
dr[2] = "女";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 5;
dr[1] = "E";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 6;
dr[1] = "F";
dr[2] = "女";
dt.Rows.Add(dr);
return dt;
}
private DataTable GetDT1()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
dt.Columns.Add(new DataColumn("Class", typeof(String)));
dt.Columns.Add(new DataColumn("Sex", typeof(String)));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "A";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "B";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "C";
dr[2] = "女";
dt.Rows.Add(dr);
return dt;
}
private List<object> GetList(DataTable dt)
{
List<object> l = new List<object>(); StringBuilder sb = new StringBuilder();
sb.Append("using System;");
sb.Append(Environment.NewLine);
sb.Append("public class ClassName");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
for (int i = 0; i < dt.Columns.Count; i++)
{
sb.AppendFormat("public {0} {1} ", dt.Columns[i].DataType.Name, dt.Columns[i].ColumnName);
sb.Append(" { set; get; } ");
sb.Append(Environment.NewLine);
}
sb.Append("}"); // 1.CSharpCodePrivoder
Dictionary<string, string> providerOptions = new Dictionary<string, string>();
providerOptions.Add("CompilerVersion", "v3.5");
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(providerOptions); // 2.ICodeComplier
ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler(); // 3.CompilerParameters
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.GenerateExecutable = false ;
objCompilerParameters.GenerateInMemory = true; // 4.CompilerResults
CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, sb.ToString()); if (cr.Errors.HasErrors)
{
return null;
}
Assembly objAssembly = cr.CompiledAssembly;
object ClassName;
Type type;
PropertyInfo[] pi;
for (int i = 0; i < dt.Rows.Count; i++)
{
ClassName = objAssembly.CreateInstance("ClassName");
type = ClassName.GetType();
pi = type.GetProperties();
for (int j = 0; j < pi.Length; j++)
{
pi[j].SetValue(ClassName, dt.Rows[i][j], null);
}
l.Add(ClassName);
} return l;
}调用new Program().GetList(new Program().GetDT());
new Program().GetList(new Program().GetDT1());