从Azure下载csv文件后如何使用linq读取CSV文件?

时间:2015-05-22 22:21:41

标签: c# linq csv azure-storage-blobs

我试图找到一个如何使用linq读取csv文件的示例。我的问题是到目前为止我找到的例子,csv文件存储在本地机器上,我从azure中提取csv文件。这是我到目前为止找到的例子:

var stuff = from l in File.ReadLines(filename)
                            let x = l.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
                                     .Skip(1)
                                     .Select(s => int.Parse(s))
                            select new
                            {
                                Sum = x.Sum(),
                                Average = x.Average()
                            };

问题在于我从Azure中获取,我必须使用DownloadToStream并将文件移动到MemoryStream。当我必须使用MemoryStream时,应该替换“File.ReadLines(filename)”?

1 个答案:

答案 0 :(得分:0)

Stream中获得数据后,有很多库可以让您轻松阅读CSV。您要避免使用Split(),因为CSV比这更复杂,容易出错。

要执行此操作的一个库是Ctl.Data NuGet包:

class MyPoco
{
    // CSV file must have a header with these property names.
    public int Foo { get; set; }
    public string Bar { get; set; }
    public DateTime Baz { get; set; }

    public static IEnumerable<MyPoco> Read(CloudBlockBlob blob)
    {
        using(Stream s = blob.OpenRead())
        using(StreamReader sr = new StreamReader(s))
        {
            foreach(MyPoco x in Ctl.Data.Formats.Csv.ReadObjects<MyPoco>(sr))
            {
                yield return x;
            }
        }
    }
}

(警告:我是这个包的作者)