public static IList<U> DataTableToEntityList<U>(U u, DataTable dt)
{
//sql返回的字段名集合
Collection<string> columnNames = getColumnNames(dt);
//需要组装的实体TYPE
Type type = u.GetType();
//结果
IList<U> resultList = new List<U>();
foreach (DataRow myRow in dt.Rows)
{
U y =u;//定义一个新对象赋值
U outObj = GetOneObject(y, type, myRow, columnNames);
//每次得到新的对象,用来赋值
resultList.Add(y);
}
return resultList;
}
private static Y GetOneObject<Y>(Y tt,Type type, DataRow myRow, Collection<string> columnNames)
{
foreach (string cName in columnNames)
{
PropertyInfo pit = type.GetProperty(cName);
pit.SetValue(tt, myRow[cName], null);
}
return tt;
}
我是想用SQL查询返回的字段名去给实体对象赋值。columnNames 是sql返回的字段名。GetOneObject方法没一行记录传给一个对象。再把得到的对象放在一个list中。
现在问题是。columnNames 和sql返回的结果都正确,但resultList 中只能保存最后一行数据的值。比如:
sql返回 :
1 1
2 2
3 3list里面应该有 3个对象,没个对象值对应上面的值。但现在list中有3个对象,可2个对象都是 3,3 。
请高手帮忙看看...谢谢!!!
{
//sql返回的字段名集合
Collection<string> columnNames = getColumnNames(dt);
//需要组装的实体TYPE
Type type = u.GetType();
//结果
IList<U> resultList = new List<U>();
foreach (DataRow myRow in dt.Rows)
{
U y =u;//定义一个新对象赋值
U outObj = GetOneObject(y, type, myRow, columnNames);
//每次得到新的对象,用来赋值
resultList.Add(y);
}
return resultList;
}
private static Y GetOneObject<Y>(Y tt,Type type, DataRow myRow, Collection<string> columnNames)
{
foreach (string cName in columnNames)
{
PropertyInfo pit = type.GetProperty(cName);
pit.SetValue(tt, myRow[cName], null);
}
return tt;
}
我是想用SQL查询返回的字段名去给实体对象赋值。columnNames 是sql返回的字段名。GetOneObject方法没一行记录传给一个对象。再把得到的对象放在一个list中。
现在问题是。columnNames 和sql返回的结果都正确,但resultList 中只能保存最后一行数据的值。比如:
sql返回 :
1 1
2 2
3 3list里面应该有 3个对象,没个对象值对应上面的值。但现在list中有3个对象,可2个对象都是 3,3 。
请高手帮忙看看...谢谢!!!
解决方案 »
- 一个奇怪的问题
- C# 应用c++编写的COM问题
- 为什么VS2005 winform的工具栏图标分辨率会降下来,怎样指明定为32位?
- CrystalReport 怎么总是报错; The report has no tables.
- 我要用第一个数组的每个数 和第二个数组每个数比较 没有交集的就合并 求大神解答
- 为何在重载CreateParams后指定Form的Height值小于某个值后就不会再小?
- 一个有关imagelist加载icon文件的问题?
- 请问什么叫名字空间?
- 怎样做一个操作其它Windows程序的程序
- mm急救!我的WEB程序如何读取本地机的串口?
- 未能找到句柄为1的被准备语句。
- 请问抓起一超时如何处理比较好呢?高手进来看看!
哪里有新对象了?完全是同一个对象,lz对同一个对象修改了3次,然后加到list里面,所以list里面的3个元素都指向同一个对象
public static IList <U> DataTableToEntityList <U>(U u, DataTable dt) where U : new()
约束U类型必须有默认构造函数
这样,就可以在代码里面直接
U y = new U()