2

我有一个调用存储过程并返回 DataTable 的 WCF 服务。我想在发送给消费者之前将 DataRows 转换为自定义对象,但不知道该怎么做。假设我从存储过程中检索了一个客户。为了简短起见,这里是通过 DataRow 的客户:

string lastName = dt.Rows[0]["LastName"].ToString();
string firstName = dt.Rows[0]["FirstName"].ToString();
string age = System.Convert.ToInt32(dt.Rows[0]["Age"].ToString());

我可以轻松找回客户。现在,我创建了一个 Customer 对象,如下所示:

public Customer
{
     public string LastName {get;set;}
     public string FirstName {get;set;}
     public int Age {get;set;}
}

我从包管理器控制台加载了 AutoMapper。然后我在我的客户身上放了一个公共静态方法,如下所示:

public static Customer Get(DataRow dr)
{
     Mapper.CreateMap<DataRow, Customer>();
     return Mapper.Map<DataRow, Customer>(dr);
}

当我单步执行我的代码时,从 Get() 返回的客户中的每个属性都是空的。我在这里想念什么?我是否必须添加自定义扩展才能从 DataRow 映射?这是一个似乎相关的线程,但我认为 AutoMapper 会立即支持这一点,特别是因为属性名称与列名称相同。提前致谢。

4

1 回答 1

7

这行得通!

public static Customer GetSingle(DataTable dt)
{
    if (dt.Rows.Count > 0) return null;

    List<Customer> c = AutoMapper.Mapper.DynamicMap<IDataReader, List<Customer>>(dt.CreateDataReader());

    return c[0];
}
于 2013-04-25T19:51:03.043 回答