【问题标题】:CsvHelper Map Constant ValueCsvHelper 映射常量值
【发布时间】:2016-08-15 13:35:35
【问题描述】:

我有一个关于 .NET 的 CsvMapper 的问题。 我正在使用类映射器将对象映射到这样的 csv 文件中:

Map(x => x.ProductId).Name("ProductId");

这很好用,但是如何将常量值写入我声明的列中?在每一行中都应该是这个静态值。

我试过了

Map(x => "constant value").Name("Constant Value Column")

但它会抛出异常“不是成员访问”

我需要这个,因为必须上传 csv 文件才能导入到另一个需要定义列结构的系统。

提前致谢!

【问题讨论】:

    标签: c# csv mapping csvhelper


    【解决方案1】:

    我知道这是一个老问题,可能您已经找到了解决方案,我将这个答案发布给即将到来的搜索者。

    您可以只使用下面的行在输出 csv 文件上映射一个常量值

    Map().Index(10).Constant("your constant value");
    

    【讨论】:

      【解决方案2】:

      Map 用于按名称或索引将现有 CSV 列映射到您的班级成员。由于这似乎是您要添加的值,因此它不会存在于 CSV 中,并且应该是 Ignored 映射;该值将由您的班级设置:

      class SampleItem
      {
          public string Name { get; set; }
          public string Descr { get; set; }
          public int Group { get; set; }
          public int Value { get; set; }
          public decimal Price { get; set; }
          public DateTime ItemDate { get; set; }
          public bool Active { get; set; }
          public string ConstVal { get; set; }
      
          public SampleItem()
          {
              ConstVal = "Ziggy";
          }
      
          public class SampleItemMap : CsvHelper.Configuration.CsvClassMap<SampleItem>
          {
              public SampleItemMap()
              {
                  AutoMap();
                  Map( m => m.ConstVal).Ignore();
              }
          }
      }
      

      由于 CSV 列与属性的顺序相同,因此可以使用 AutoMapConstVal 属性是 Ignored,因为它源自类。

      List<SampleItem> sList = new List<SampleItem>();
      
      using (StreamReader sr = new StreamReader(@"C:\Temp\sample.csv", false))
      using (CsvReader csv = new CsvReader(sr))
      {
          csv.Configuration.Delimiter = ",";
          csv.Configuration.HasHeaderRecord = true;
          csv.Configuration.RegisterClassMap<SampleItem.SampleItemMap>();
      
          sList = csv.GetRecords<SampleItem>().ToList();
          dgv2.DataSource = sList;
      }
      

      【讨论】:

      • 感谢您的回答,很抱歉我的问题表达得不够巧妙,但我想从可枚举的对象写入 csv 文件。对象中不存在 csv 文件所需的某些字段(常量值),因此我想创建常量值以写入 csv。常量值是必需的,因为我要创建的 csv 文件必须上传到另一个系统。也许我可以向对象添加常量属性,但这对我来说不是一个干净的解决方案,因为我要导出的对象是实体框架代码优先数据库的一部分。
      • 我不确定输入与输出是否重要——如果数据不存在,它就不存在。如果您不想为 csv 输出创建一个新类,您可以使用 ToCSVString() 方法来格式化成员并根据需要向字符串添加一些文字 return String.Format("{0}, {1}, ziggy, {2}..."
      猜你喜欢
      • 2015-12-12
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多