C# 使用AutoMapper将RowDataCollection映射到DTO
是否有方法使用将行数据收集映射到DTO 下面是一个场景:数据行到对象C# 使用AutoMapper将RowDataCollection映射到DTO,c#,.net,automapper,datarow,datarowcollection,C#,.net,Automapper,Datarow,Datarowcollection,是否有方法使用将行数据收集映射到DTO 下面是一个场景:数据行到对象 user.UserId = row["UserId"]; user.UserName = row["UserName"]; 你可以做一个测试。而且,如果您确定DTO属性名称将与DataRow列名完全匹配,您可能需要进行一些反射,并使用一个单一类型转换器。glbal.asax配置 Mapper.CreateMap<DataRow, EventCompactViewModel>() .Conver
user.UserId = row["UserId"];
user.UserName = row["UserName"];
你可以做一个测试。而且,如果您确定DTO属性名称将与DataRow列名完全匹配,您可能需要进行一些反射,并使用一个单一类型转换器。glbal.asax配置
Mapper.CreateMap<DataRow, EventCompactViewModel>()
.ConvertUsing(x => (EventCompactViewModel)AutomapperExtensions.DataRowMapper(x, typeof(EventCompactViewModel), null));
.ToPascalCase()在最新的AutoMapper 1.1库中找不到,有什么替代方法?您可以从亚音速使用ToPascalCase
public static object DataRowMapper(DataRow dataRow, Type type, string prefix)
{
try
{
var returnObject = Activator.CreateInstance(type);
foreach (var property in type.GetProperties())
{
foreach (DataColumn key in dataRow.Table.Columns)
{
string columnName = key.ColumnName;
if (!String.IsNullOrEmpty(dataRow[columnName].ToString()))
{
if (String.IsNullOrEmpty(prefix) || columnName.Length > prefix.Length)
{
String propertyNameToMatch = String.IsNullOrEmpty(prefix) ? columnName : columnName.Substring(property.Name.IndexOf(prefix) + prefix.Length + 1);
propertyNameToMatch = propertyNameToMatch.ToPascalCase();
if (property.Name == propertyNameToMatch)
{
Type t = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;
object safeValue = (dataRow[columnName] == null) ? null : Convert.ChangeType(dataRow[columnName], t);
property.SetValue(returnObject, safeValue, null);
}
}
}
}
}
return returnObject;
}
catch (MissingMethodException)
{
return null;
}
}