LINQ从CSV对象中查找平均值

时间:2014-11-10 16:11:18

标签: c# linq csv

我有一个带有库存信息的CSV(我有一个名为DailyValues的{​​{1}}对象列表),我需要从中提取。它看起来像这样:

stockValues

基本上,我需要使用LINQ在CSV中找到每年的平均音量。我可以做到,但它很邋and,只能工作一年,所以我必须每年复制一段时间才能完成它(它有1993 - 2012年)。这就是我所拥有的:

Date,Open,High,Low,Close,Volume,Adj Close
2012-11-01,77.60,78.12,77.37,78.05,186200,78.05
2012-10-31,76.96,77.75,76.96,77.47,290700,77.47  //and so on

所以,再次,这很好,但我不想每年都这样做。有没有人知道如何简化我的问题?

2 个答案:

答案 0 :(得分:3)

你可以试试像:

 var groupedValues = stockValues.GroupBy(n => n.Date.Year)
                   .Select (g => new {
                       Average = g.Average(p => p.Volume), 
                       Year = g.Key
                    });

这将返回每年的平均值,请参阅此fiddle

答案 1 :(得分:2)

var groupedResults = stockValues.GroupBy(m => m.Date.Year)
                               .Select(g => new {
                                  year = g.Key,
                                  avg = g.Average(s => s.Volume)
                               });


foreach (var res in groupedResults)
   Console.WriteLine("{0} average : {1}", res.year, res.avg));