#c# #csvhelper
#c# #csvhelper
Вопрос:
Я импортирую записи из файлов csv, которые не имеют одинаковых столбцов. Я пытаюсь создать сопоставление, которое будет видеть, отсутствует ли столбец, а затем просматривает другой столбец и на основе этого создает значение для первого.
Я попробовал что-то вроде этого:
Map(m => m.ImportNo).TypeConverter<PeriodConverter>();
Map(m => m.Period).Optional();
И:
public class PeriodConverter : StringConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
if (String.IsNullOrWhiteSpace(text))
{
if (row.GetField("Period") == "08/2012 - 12/2012")
return 1;
else if (row.GetField("Period") == "01/2013 - 06/2013")
return 2;
else
return 0;
}
return int.Parse(text);
}
}
Но это не удается, так как нет столбца ImportNo.
С другой стороны, если я изменю код моего сопоставления на этот:
Map(m => m.ImportNo).Optional().TypeConverter<PeriodConverter>();
Map(m => m.Period).Optional();
Добавив необязательный()
Он просто игнорирует созданный мной преобразователь типов.
Есть ли лучший способ, которым я мог бы написать этот конвертер, чтобы он работал?
Ответ №1:
ConvertUsing
должно работать
Map(m => m.ImportNo).ConvertUsing(row =>
{
if(row.TryGetField("ImportNo", out int importNo))
{
return importNo;
}
if (row.GetField("Period") == "08/2012 - 12/2012")
return 1;
else if (row.GetField("Period") == "01/2013 - 06/2013")
return 2;
else
return 0;
});
Map(m => m.Period).Optional();