LinqToCsv - 将单个对象写入文件

时间:2015-10-19 14:53:32

标签: c# linq linqtocsv

我使用LinqToCsv库创建逗号分隔文件并遇到问题。我在这里阅读了有关它的文章:http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library

在我的情况下,我的班级设计是这样的:

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但是例如如果这个人有三个地址我也想要它在输出文件中创建三行。(是的,每行的公共信息都会重复)。  但我无法弄清楚该怎么做?因为Write方法只采用IEnumerable

1 个答案:

答案 0 :(得分: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;}
}