2016-10-28 180 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,然後從你的問題代碼將工作