【发布时间】:2016-05-13 19:14:21
【问题描述】:
基本上我要做的是使用 CSVHelper 读取 CSV 文件。诀窍在于有多个文件(每次用户选择不同的文件)并且每个文件都有不同的结构。
他们唯一共享的是第一个名为“Id”的列,然后他们每个人都有不同数量的列(从 2 个到 5 个)具有不同的数据类型。
我试图这样做:
public class Country
{
public int Id { get; set; }
public IList<string> Attributes { get; set; }
}
public sealed class CountryMap : CsvClassMap<Country>
{
private List<string> attributeColumns =
new List<string> { "Attribute1", "Attribute2", "Attribute3", "Attribute4", "Attribute5" };
public override void CreateMap()
{
Map(m => m.Id).Name("Id").Index(0);
Map(m => m.Attributes).ConvertUsing(row =>
attributeColumns
.Select(column => row.GetField<string>(column))
.Where(value => String.IsNullOrWhiteSpace(value) == false)
);
}
}
然后用:
using (var reader = new CsvReader(new StreamReader(FilePath,encoding.UTF8)))
{
reader.Configuration.RegisterClassMap<CountryMap>();
while (reader.Read())
{
var card = reader.GetRecord<Country>();
}
}
但只有我得到的是 car = null。
我将非常感谢任何提示和答案。
【问题讨论】:
-
在以下网页上使用我的 CSVReader 类:stackoverflow.com/questions/30129406/…。结果被放入数据表中。您可以多次调用该类并将第二个结果放在不同的 DataTable 中。使用连接来合并两个数据表。