2015-10-19 120 views
0

我正在使用LinqToCsv庫創建逗號分隔文件並遇到問題。我讀到這裏的文章:http://www.codeproject.com/Articles/25133/LINQ-to-CSV-libraryLinqToCsv - 將單個對象寫入文件

在我的情況,我的一流的設計是這樣的:

class AddressIndo 
{ 
    public string City { get; set;} 
    public string Street {get;set;} 
} 

class PersonInfo 
{ 
    public PersonInfo() 
    { 
     this.AddressList = new List<AddressInfo> ; 
    } 
    public string Name{get;set;} 
    public string Phone {get;set;} 
    public List AddressList <AddressInfo> {get; set;} 
} 

所以PersonInfo類本身具有的那個人的地址的列表。因此,現在我想將PersonInfo對象寫入該文件,並且看起來像這個庫的Write方法只需要一個IEnumerable,,但是例如,如果該人有三個地址,我希望它也在輸出文件中創建三行。(是的,常見的信息將重複每行)。 但我想不出如何做到這一點?因爲寫入方法只需要一個IEnumerable

+0

也許我應該先通過我的ProviderInfo的列表迭代並創建一個更大的列表,然後將其傳遞給Write方法? – Bohn

+0

你不打算把它們放在一條線上嗎? – Ric

+0

@Ric nop,他們希望他們在新的行,所以如果這傢伙有三個addresees,我們將有三行,當然他的公共信息行的名字,姓氏,電話等將再次在每一行中重複。 – Bohn

回答

1

不是超級理想,但如果你有一個對象,並需要進行多次行,每行有不同的地址相同的信息,你可以做這樣的事情:

void Main() 
{ 
    var csvList = new List<PersonInfoCSVModel>(); 
    var yourPersonObject; //already filled with the data you want 

    yourPersonObject.AddressList.ForEach(address => 
    { 
     csvList.Add(new PersonInfoCSVModel() 
     { 
      Name = yourPersonObject.Name, 
      Phone = yourPersonObject.Phone, 
      City = address.City, 
      Street = address.Street 
     }); 
    }); 

    yourCSVContext.Write(csvList, "yourFile.csv"); 
} 

class PersonInfoCSVModel 
{ 
    [CsvColumn(Name = "Name", FieldIndex = 1)] 
    public string Name{get;set;} 

    [CsvColumn(Name = "Phone", FieldIndex = 2)] 
    public string Phone {get;set;} 

    [CsvColumn(Name = "City", FieldIndex = 3)] 
    public string City { get; set;} 

    [CsvColumn(Name = "Street", FieldIndex = 2)]  
    public string Street {get;set;} 
}