我使用了以下代码:
ManageUser userObj = new ManageUser();
List<StoreUserList> storeList = new List<StoreUserList>();
StoreUserList sl = new StoreUserList();
foreach (var items in userObj.GetStoreUserList(Username, Password))
{
sl.UserName = items[0].ToString();
sl.EmailId = items[1].ToString();
sl.FirstName = items[2].ToString();
sl.LastName = items[3].ToString();
sl.BadLoginCount = Convert.ToInt32(items[4]);
sl.ManagerName = items[5].ToString();
storeList.Add(sl);
}
StoreUserList 是我的模型,其中我定义了所有属性 ManagerUser 是以List&lt; DataRow &gt;形式返回数据的类。
所以,我要填充我使用上面代码的模型类型的通用列表来执行此操作。
但是,正如您所看到的,我已经对所有值进行了硬编码以绑定模型,然后将该模型添加到列表中。我只是想知道是否还有其他一些方法可以做到这一点或者一些神奇的方法来轻松完成它?
答案 0 :(得分:1)
您可以将automapper项目用于this。在这里查看更多详细信息:
How to use AutoMapper to map a DataRow to an object in a WCF service?
答案 1 :(得分:1)
我认为您的代码不会在列表中添加多个StoreUserList对象,但只会添加一个对象,其值为最后一个datarow。你需要做的是
ManageUser userObj = new ManageUser();
List<StoreUserList> storeList = new List<StoreUserList>();
StoreUserList sl = null;
foreach (var items in userObj.GetStoreUserList(Username, Password))
{
sl = new StoreUserList();
sl.UserName = items[0].ToString();
sl.EmailId = items[1].ToString();
sl.FirstName = items[2].ToString();
sl.LastName = items[3].ToString();
sl.BadLoginCount = Convert.ToInt32(items[4]);
sl.ManagerName = items[5].ToString();
storeList.Add(sl);
}
否则我的代码中没有任何问题。
答案 2 :(得分:1)
如果您可以稍微修改ManageUser.GetStoreUserList
以返回DataTable
而不是List<DataRow>
,那么您可以使用Automapper,它可以将IDataReader
实施映射到对象集合。
假设您有此实体类型:
class User
{
public int Id { get; set; }
public string Name { get; set; }
}
然后您可以通过这种方式将DataTable
转换为List<User>
:
// sample data table
var dataTable = new DataTable();
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Rows.Add(1, "John");
dataTable.Rows.Add(2, "Mary");
dataTable.Rows.Add(3, "Peter");
dataTable.Rows.Add(4, "Sarah");
// fill users list
using (var reader = dataTable.CreateDataReader())
{
var users = Mapper.Map<IDataReader, List<User>>(reader);
}