2016-10-28 98 views
1

我使用这个CSV阅读器试图从我的CSV文件打印出来姓名,姓氏和SSN:列名(LINQ CSV阅读器)

static void Main(string[] args) 
{ 
     var query = File.ReadLines(@"C:\CSV\ToAdd.csv") 
         .SelectMany(line => line.Split(';')) 
         .Where(csvLine => !String.IsNullOrWhiteSpace(csvLine)) 
         .Select(csvLine => new { data = csvLine.Split(',') }) 
         .Select(s => new 
         { 
          Name = s.data[0], 
          Lastname = s.data[1], 
          SSN = s.data[2] 
         }); 

     foreach (var item in query) 
     { 
      Console.WriteLine(item); 
     } 
     Console.ReadKey(); 
} 

到目前为止,我有有些成功的,但问题是它使打印出的列的名称,以及:

{ Name = Hej, Lastname = Hoj, SSN= 950505-1432 } 
{ Name = Huj, Lastname = Hij, SSN= 940304-1332 } 

代码的哪些部分正在它,所以它被打印出来一样,而不是打印出来只记录?

+0

我建议更新问题+标题,以更好地反映了这个问题 - 当打印这个linq生成的匿名类型对象时,它不是您所期望的格式 –

回答

1

打印时这样说:

foreach (var item in query) 
{ 
    Console.WriteLine(item); 
} 

它使用的.Net的编译器生成匿名类型实现的ToString()。它的实现是以属性名称+值的格式打印数据。

当你想要做的反而是给进行打印时的特定格式:

  1. 使用C#6字符串插值(这只是语法为string.Format糖 ),你可以做这样的:

    foreach (var item in query) 
    { 
        Console.WriteLine($"{item.Name} {item.Lastname}, {item.SSN}"); 
    } 
    
  2. 使用Console.WriteLine的另一个过载:

    foreach (var item in data) 
    { 
        Console.WriteLine("{0} {1}, {2}",item.Name, item.Lastname, item.SSN); 
    } 
    

    3.Or如果你投射到一个定义的类型,而不是匿名类型可以覆盖对象的ToString,然后从你的问题代码将工作