2011-01-05 109 views
0

如果我有以下(示例)文本文件;Linq to CSV按列選擇

year,2008,2009,2010 
income,1000,1500,2000 
dividends,100,200,300 
net profit,1100,1700,2300 
expenses,500,600,500 
profit,600,1100,1800 

Linq有沒有辦法可以選擇2010年的費用?

到目前爲止,我有以下內容可以獲取所有數據;

 var data = File.ReadAllLines(fileName) 
      .Select( 
       l => { 
        var split = l.CsvSplit(); 
        return split; 
       } 
      ); 

     foreach (var item in data) 
      Console.WriteLine("{0}: ${1}", item[0], item[1]); 
+0

'data'是一個字符串[] []'? – Ani 2011-01-05 23:57:15

+0

@Ani the Select將返回一個'IEnumerable ',並且從他在foreach中的使用看起來T是'string []' – 2011-01-06 00:00:26

+0

@Kirk Broadhurst:是的,我應該說'IEnumerable '。 – Ani 2011-01-06 00:04:19

回答

1

如果你知道它總是第3個值列,然後

// the expenses row 
var query = data.Single(d => d[0] == "expenses"); 

// the third column 
return query[3]; 

,如果你不這樣做,那麼

var columnNumber = Array.IndexOf(data.First(), "2010"); 
return query[columnNumber]; 
+0

沒有得到IndexOf的很多愛。 – griegs 2011-01-06 00:17:28

+0

我並沒有完全使用這種方法,但它確實指向了我的正確方向,謝謝@Kirk。 – griegs 2011-01-06 00:38:52

+0

@griegs對不起,習慣於List/Linq語法。我現在更新它使用'Array.IndexOf'應該工作。 – 2011-01-06 00:42:40