【问题标题】:Override collection column name覆盖集合列名称
【发布时间】:2021-06-08 22:56:39
【问题描述】:

我有一个非常简单的类,我想将其写入 CSV。例如,它包含一个“列表”。我有映射工作,如果我添加一个映射语句来提供索引的名称(例如'Index(2, 5).Name(“The List”)')它就可以工作。但是,列名出现“The List 1,The List 2,The List 3,The List 4”。

我看到一篇旧帖子说无法覆盖这些名称。这仍然是真的吗?我试过玩“.Convert”但没有成功。我在文档中看到了我无法找到的示例引用。

在一天结束的时候,我想要的只是一张地图,可以像这样上课:

    public class SimpleListClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<int> TheCollection { get; set; }
    }

让我覆盖“TheCollection”的列名。

非常感谢任何/所有帮助!

谢谢!

【问题讨论】:

  • 您希望列名看起来像什么?
  • 就我而言,这比较简单,我只想要,例如“压力1(kPa),压力2(kPa)”等。

标签: csvhelper


【解决方案1】:

我认为不可能以您想要的方式覆盖名称。我知道使它工作的唯一方法是手动写出标题。

void Main()
{
    var records = new List<SimpleListClass>
    {
        new SimpleListClass { Id = 1, Name = "one", TheCollection = new List<int>{1,2,3,4} },
    };
    
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        HasHeaderRecord = false
    };

    //using (var writer = new StreamWriter("path\\to\\file.csv"))
    using (var csv = new CsvWriter(Console.Out, config))
    {
        csv.Context.RegisterClassMap<SimpleLIstClassMap>();
        
        csv.WriteField("Id");
        csv.WriteField("Name");
        
        for (int i = 1; i < 5; i++)
        {
            csv.WriteField($"Pressure {i} (kPa)");
        }
        
        csv.NextRecord();
        
        csv.WriteRecords(records);
    }
}

public class SimpleListClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<int> TheCollection { get; set; }
}

public class SimpleLIstClassMap : ClassMap<SimpleListClass>
{
    public SimpleLIstClassMap()
    {
        Map(x => x.Id);
        Map(x => x.Name);
        Map(x => x.TheCollection).Index(2, 5);
    }
}

【讨论】:

  • 是的,我最终就是这样做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多