Использование CsvHelper и ClassMap для сопоставления объектной модели с выводом. Попытка динамически генерировать отображение с помощью лямбда-выражений. До сих пор:
public class BaseClassMap<TClass> : ClassMap<TClass> where TClass : class
{
public BaseClassMap(List<string> columns)
{
var index = 0;
PropertyInfo[] props = typeof(TClass).GetProperties();
foreach (PropertyInfo prop in props)
{
index = columns.IndexOf(prop.Name);
if (index != -1)
{
var columnAttribute = prop.GetCustomAttributes(false).FirstOrDefault(a => a.GetType() == typeof(ColumnAttribute)) as ColumnAttribute;
var parameterExpression = Expression.Parameter(typeof(TClass), "x");
var memberExpression = Expression.PropertyOrField(parameterExpression, prop.Name);
var memberExpressionConversion = Expression.Convert(memberExpression, typeof(object));
var lambda = Expression.Lambda<Func<TClass, object>>(memberExpressionConversion, parameterExpression);
Map<object>(lambda).Index(index).Name(columnAttribute != null ? columnAttribute.Name : prop.Name);
}
}
}
}
Получение:
Невозможно привести объект типа CsvHelper.Configuration.MemberMap 2[KXL_CDMS_svc.Data.Entities.ExpTempApplication.TempEnvPermitTrackingCdms,System.String]
к типу CsvHelper.Configuration.MemberMap 2[KXL_CDMS_svc.Data.Entities.ExpTempApplication.TempEnvPermitTrackingCdms,System.Object]
.
в
Map<object>(lambda).Index(index).Name(GetTitle(columnAttribute != null ? columnAttribute.Name : prop.Name));
Новое в лямбда-выражениях. Есть предложения?