public class Template : Entity
{
public Template()
{
TemplateItems = new List<TemplateItem>();
}
public int id { get; set; }
public string name { get; set; }
public virtual ICollection<TemplateItem> TemplateItems { get; set; }
}
public class TemplateItem : Entity
{
public int id { get; set; }
public int templateId { get; set; }
public string name { get; set; }
public virtual Template Template { get; set; }
}
public sealed class TemplateMap : CsvClassMap<Template>
{
public TemplateMap()
{
Map(m => m.name).Name("name");
//Map(m => m.TemplateItems).ConvertUsing(row => new List<string> { row("nodeType") });
// How to map a collection value to csv column
}
}
我正在读取 CSV 文件,需要将 csv 列映射到两个不同的表 我有两种不同的 table 模型 即模板和模板项 模板项是从模板映射的 如何映射 csv 类?
请您参考如下方法:
目前这是不可能的。您需要手动处理集合。如果您想将所有内容保存在映射文件中,一种方法是使用 ConvertUsing。
这是一个例子:
void Main()
{
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader))
{
writer.WriteLine("1,a,b,c");
writer.WriteLine("2,d,e,f");
writer.Flush();
stream.Position = 0;
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.RegisterClassMap<TestMap>();
csv.GetRecords<Test>().Dump();
}
}
public class Test
{
public int Id { get; set; }
public List<string> Names { get; set; }
}
public class TestMap : CsvClassMap<Test>
{
public TestMap()
{
Map(m => m.Id);
Map(m => m.Names).ConvertUsing(row =>
{
var list = new List<string>();
list.Add(row.GetField( 1 ));
list.Add(row.GetField( 2 ));
list.Add(row.GetField( 3 ));
return list;
});
}
}
