2016-08-15 78 views
0

我對CsvMapper for .NET有疑問。 我使用類映射器將對象映射到一個CSV文件是這樣的:CsvHelper映射常量值

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

這工作得很好,但我怎麼能寫一個恆定值成一列我宣佈?在每一行都應該是這個靜態值。

我試圖

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

但它拋出一個異常「不是一個成員訪問」

我需要這個,因爲CSV文件已被上傳用於導入到需要一個定義的列的另一系統結構體。

提前致謝!

回答

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; 
} 

enter image description here

+0

謝謝您的回答,對不起,我inartfully表達的問題,但我想從對象的可枚舉寫入csv文件。 csv文件所需的一些字段(常量值)不存在於對象中,所以我想創建用於寫入csv的常量值。常量值是必需的,因爲我想創建的csv文件必須上傳到另一個系統。也許我可以爲對象添加常量屬性,但這對我來說不是一個乾淨的解決方案,因爲我的要導出的對象是實體框架代碼第一個數據庫的一部分。 –

+0

我不確定輸入與輸出有關係 - 如果數據不存在,它不存在。如果你不想爲csv輸出創建一個新的類,你可以使用'ToCSVString()'方法來格式化成員,並根據需要在字符串中添加一些文字'return String.Format(「{0},{ 1},ziggy,{2} ...「 – Plutonix