2011-01-05 77 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