Задать вопрос
@new-profile-web
Начинающий программист

Группировка и Суммирование значений из файла CSV с помощью Linq C#?

Я новичОк и пытаюсь разобраться с задачей, есть CSV файл, в котором находятся данные в одном столбце,пример:
03.03.2020,100
04.03.2020,150
09.04.2020,130
10.04.2020,150

Примечание:
DateTime, Value

Нужно сгруппировать данные за 1 месяц (суммировать их значения) и получить среднее значение за месяц (к примеру в месяце 4-5 продаж, вот нужно сумму за месяц / на кол-во значений в том же месяце)


Результат:
03.2020,130
04.2020,140

Действие:
var result = lstTest
  .Select(row => row.Split(','))
  .GroupBy(row => DateTime.Parse(row[0]), row => int.Parse(row[1]), (date, val) => new { Date = date, Value = val }) //.Average()
  .GroupBy(x => x.Date.Month, x => x.Value.Average());


Получаю ответ:
System.Linq.Lookup`2+Grouping[System.Int32,System.Double]

Старая версия кода:
spoiler

List lstTest = new List(); //перебрасываю значения во временный список

for(int i = 3; i < lst.Count; i++)
lstTest.Add(lst[i]);

var result =
from line in lstTest
let values = line.Split(',')
let date = values[0]
group values by date into g
orderby g.Key
select new
{
date_column = g.Key,
value_column = g.Sum(x => int.Parse(x[1]))
};

var result2 = result.Select(record => record.date_column + "," + record.value_column);

foreach(var r in result2)
Console.WriteLine(r);
  • Вопрос задан
  • 224 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
var avg = lstTest
  .Select(row => row.Split(','))
  .GroupBy(row => row[0].Substring(3), row => int.Parse(row[1]), (date, val) => new { Date = date, Value = val.Average() });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы