Рассчитать общую сумму для каждого повторяющихся дня, в выбранном периоде дат, для показа графика
веб приложение на блазор
Если пользователь выбирает промежуток (например) три недели на календаре, как ему показать общее число каждого понедельника, вторника итд. на графике ?
Я использую дату для показа дней (XName), чтоб решить данную задачу я решила использовать день недели, мой график просто показывает на одной оси все числа.
public DateTime DateValue { get; set; }
private DayOfWeek dayOfWeekValue { get; set; }
public DayOfWeek DayOfWeekValue { get => DateValue.DayOfWeek; set { dayOfWeekValue = value; } }
Может группировку я могу изменить?
private async Task GetCalendar2()
{
if (weighsModels != null)
{
chart1 = weighsModels.Where(d => d.date >= MinDate && d.date <= MaxDate).ToList();
var groupTotalByDay = from chart in chart1
group chart by chart.DateValue into ChartData
select new ModelChart()
{
DateValue = ChartData.Key,
YNameValue = ChartData.Sum(x => x.YNameValue),
};
chart1 = groupTotalByDay.ToList();
}
this.StateHasChanged();
}
сейчас график базируется на двух календарях, первый показывает "текущую неделю" выбранной даты, а второй календарь позволяет выбрать "промежуток". так вот я показываю все дни, что выбрал пользователей, а мне нужно "суммировать" "повторяющиеся" дни

ОЖИДАНИЯ: то есть график ВСЕГДА показывает неделю, меняются, просто данные (прибавляет YNameValue каждого одинакового дня недели) (я не понимаю зачем такое делать (все дни показать куда полезней), но это запрос клиента...)
upd: как то можно вызвать к дням функцию sum, при условии, что даты разные ?
Ответы (2 шт):
group chart by chart.DateValue into ChartData
group chart by chart.DateValue.DayOfWeek into ChartData
расчитать среднее число в таблице онлайн
пуш гихаб update
решение предложила служба syncfusion, ConvertDateTime позволила расправить график, и решить вопрос с графиком, который показывал все данные на вертикальной линии. Размещаю в виде ответа, сейчас если выбрать промежуток две недели, график считает общую сумму двух понедельников, осталось только найти Average-среднее число. Сейчас когда я применяю average вместо sum, то получаю не верные данные, тк. average расчитывает деля на количество данных, а надо делить на дни, чтоб получить то самое среднее число (переводчик переводит Average как среднее число, прошу поправить , тк в комментариях был вопрос, может не так перевела?♀️)
для примера выбираю промежуток 16-24 попадает два понедельника на 16+23 два понедельника у нас 32 (23+9) общее число
new ModelChart{ date = new DateTime(2022,05,16), YNameValue = 10, },
new ModelChart{ date = new DateTime(2022,05,16), YNameValue = 5, },
new ModelChart{ date = new DateTime(2022,05,16), YNameValue = 5, },
new ModelChart{ date = new DateTime(2022,05,16), YNameValue = 3, }, //23
new ModelChart{ date = new DateTime(2022,05,23), YNameValue = 1, },
new ModelChart{ date = new DateTime(2022,05,23), YNameValue = 1, },
new ModelChart{ date = new DateTime(2022,05,23), YNameValue = 3, },
new ModelChart{ date = new DateTime(2022,05,23), YNameValue = 4, }, //9
private async Task GetCalendar2()
{
if (weighsModels != null)
{
chart1 = weighsModels.Where(d => d.date >= MinDate && d.date <= MaxDate).ToList();
var groupTotalByDay = from chart in chart1
group chart by chart.date.DayOfWeek into ChartData
select new ModelChart()
{
date = ConvertDateTime(ChartData.Key),
YNameValue = ChartData.Sum(x => x.YNameValue),
// смотришь и думаешь, я же вроде так пробовала?
// а это для average
//YNameValue = ChartData.Sum(x => x.YNameValue)/ChartData.GroupBy(chart => chart.date).Count(),
};
chart1 = groupTotalByDay.ToList();
}
this.StateHasChanged();
}
private DateTime ConvertDateTime(DayOfWeek dayOfWeek)
{
DateTime date = DateTime.Now;
int diff = dayOfWeek - date.DayOfWeek;
if (diff < 0)
{
diff += 7;
}
return date.AddDays(diff);
}


