使用LINQ c#从csv文件创建一个新对象

时间:2017-02-21 10:20:21

标签: c# linq

我有一个csv文件

Date,Open,High,Low,Close,Volume,Adj Close
2011-09-23,24.90,25.15,24.69,25.06,64768100,25.06
2011-09-22,25.30,25.65,24.60,25.06,96278300,25.06
...

我有一个带有字段的班级StockQuote Date,open,high... 如何使用 linq 从csv文件中创建StockQuote对象列表?

我正在尝试这样的事情:`

 stirng[] Data = parser.ReadFields();  
     var query = from d in Data  
    where !String.IsNullorWhiteSpace(d)  
    let data=d.Split(',')  
    select new StockQuote()  
    {  
    Date=data[0],  Open=double.Parse(data [ 1 ] ),
    ...

`

3 个答案:

答案 0 :(得分:2)

你可以这样做......

var yourData = File.ReadAllLines("yourFile.csv")
                   .Skip(1)
                   .Select(x => x.Split(','))
                   .Select(x => new
                                {
                                    Date= x[0],
                                    Open = double.Parse(x[1]),
                                    High = double.Parse(x[2]),
                                    Low = double.Parse(x[3]),
                                    Close = double.Parse(x[4]),
                                    Volume = double.Parse(x[5]),
                                    AdjClose = double.Parse(x[6])
                                });

答案 1 :(得分:0)

您不应该使用Linq,Regex等进行CSV解析。对于CSV解析,请使用CSV解析器。 Linq和Regex将完全正常工作直到您遇到转义控制字符,多行字段或类似的东西。然后他们会突然破裂。并且可能是不可修复的。

答案 2 :(得分:0)

看看这个问题: Parsing CSV files in C#, with header

答案提到.Net集成的CSV解析器似乎很好。 不,你不需要Linq。