【问题标题】:CsvHelper Map ColletionCsvHelper 地图集合
【发布时间】:2016-08-13 22:17:13
【问题描述】:

我正在使用 CsvHelper 将 csv 文件与学校记录进行映射 最终结果应该是学校列表。 Similar issue can be found here

 public class School
{
    public IList<Student> Students{ get; set; } 
}

public class Student
{
    public StudentRef Reference{ get; set; }
}

public class StudentRef
{
    public string RefNumber{ get; set; }
}

CSV 文件中的一列是 SRef,应该链接到 StudentRef.RefNumber

public sealed class StudentRefMap : CsvClassMap<StudentRef>
    {
        public StudentRefMap ()
        {

            Map(m => m.RefNumber).Name("SRef");
        }
    }

     public sealed class StudentMap : CsvClassMap<Student>
    {
        public StudentMap ()
        {

             References<StudentRefMap >(m => m.Reference);
        }
    }

    public sealed class SchoolMap : CsvClassMap<School>
    {
        public SchoolMap ()
        {

            //References<StudentMap>(m => m.Students);//doesn't work
             Map(m => m.Students)
                .ConvertUsing(row => new List<Student>
                {row.GetRecord<Student>()}); // doesn't work
        }
    }

我想用 Schools 列表映射 csv 文件,但是其中一列是指 StudentRef 所以使用 CSVHelper,我该如何实现?

【问题讨论】:

  • 这是一个不清楚的帖子。你有没有想过 linq to csv ?
  • 好的,抱歉我的问题不清楚,我确实修改了一点,希望现在更清楚。我也必须使用 CsvHelper ,谢谢
  • 我认为由于嵌套对象,您必须手动读取记录:joshclose.github.io/CsvHelper/#reading-reading-records-manually

标签: c# csvhelper


【解决方案1】:

使用ReferenceMaphttp://joshclose.github.io/CsvHelper/#mapping-reference-map

public sealed class PersonMap : CsvClassMap<Person>
{
    public PersonMap()
    {
        Map( m => m.Id );
        Map( m => m.Name );
        References<AddressMap>( m => m.Address );
    }
}

public sealed class AddressMap : CsvClassMap<Address>
{
    public AddressMap()
    {
        Map( m => m.Street );
        Map( m => m.City );
        Map( m => m.State );
        Map( m => m.Zip );
    }
}

【讨论】:

  • 感谢 Josho 回答我的问题。参考地图不起作用。您给出的示例与我的示例不同: Person 有 List
    并且每个地址都有类 city 现在我必须映射 City.Name 但地址列表是问题在这里检查您的答案groups.google.com/forum/#!topic/csvhelper/wojFoDVkSd0跨度>
  • @Maro 你有解决办法吗?
猜你喜欢
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2018-04-11
  • 2012-06-15
  • 2012-11-21
  • 1970-01-01
相关资源
最近更新 更多