Заполнение микродиаграмм из API Получить ответ \ Наблюдаемая коллекция

У меня есть рабочий API, который возвращает набор «Смен» (рассмотрите их в контексте расписания). Данные успешно возвращаются из API, как выделено в выдержке ниже.:

[{"id":1006,"wI_Date":"2020-05-01T00:00:00","wI_Start_Time":"2020-05-01T08:00:00","wI_End_Time":"2020-05-01T17:00:00","name":"Surgery 1","rate":60.0000,"paid":"N         ","revenue":"540       "},{"id":1007,"wI_Date":"2020-05-04T00:00:00","wI_Start_Time":"2020-05-04T08:00:00","wI_End_Time":"2020-05-04T17:00:00","name":"Medical Surgery 2","rate":45.0000,"paid":"N         ","revenue":"405       "},{"id":1008,"wI_Date":"2020-05-07T00:00:00","wI_Start_Time":"2020-05-07T08:00:00","wI_End_Time":"2020-05-07T17:00:00","name":"TEST Medical Surgery","rate":45.0000,"paid":"N         ","revenue":"405"}]

У меня есть сотни записей в отчете, которые охватывают весь календарный год (по wI_Date), и действительно, с течением времени и ростом набора данных он также будет охватывать несколько лет.

Я пытаюсь понять, как сгруппировать записи по месяцу\году, чтобы я мог добавить их в список записей для Micorcharts.BarGraph - без группировки в бэкэнде. Затем он хочет суммировать значения дохода за этот месяц и это значение, которое я хочу передать на свою диаграмму в качестве записи.

Сдвиг определяется как:

public class Shift
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public DateTime WiDate { get; set; }
        public DateTime WiStartTime { get; set; }
        public DateTime WiEndTime { get; set; }
        public int Practice { get; set; }
        public string Rate { get; set; }
        public string Paid { get; set; }
        public string Revenue { get; set; }
    }

Мой вызов API выглядит так:

var content = await _client.GetStringAsync(URL);
var shifts= = JsonConvert.DeserializeObject<List<Shift>>(content);

OShifts = new  ObservableCollection<Shift>(shifts);

Итак, у меня есть ObservableCollection. Я изо всех сил пытаюсь сгруппировать это по году \ дате, чтобы добавить к записям для Micorcharts.BarGraph..

чтобы помочь ниже, приведен пример того, как заполнить диаграмму.

private List<Entry> _entries = new List<Entry>
        {
            new Entry(200)
            {
                Color = SKColor.Parse("#3333FF"),
                Label = "TEST LABEL 1",
                ValueLabel = "200",


            },

            new Entry(400)
            {
                Color = SKColor.Parse("#FF141F"),
                Label = "TEST LABEL 2",
                ValueLabel = "400",


            },

            new Entry(300)
            {
                Color = SKColor.Parse("#49FF33"),
                Label = "TEST LABEL 3",
                ValueLabel = "300",


            },

MyBarChart.Chart = new BarChart { Entries = _entries };

У кого-нибудь есть идеи или пример кода..??

Спасибо за прочтение..


person Chris Smith    schedule 07.11.2020    source источник
comment
ваша проблема не так очевидна, по какому именно году/дате вам нужно сгруппировать?   -  person Ismail Diari    schedule 07.11.2020
comment
Извините.. Поэтому мне нужны все записи данных в наблюдаемой коллекции, сгруппированные по дате и году... (согласно полю WIDate в наблюдаемой коллекции). (сумма выручки = ) 1200 фунтов стерлингов 2020 г. - март- (сумма выручки = ) 1300 фунтов стерлингов и т. д. и т. д.   -  person Chris Smith    schedule 07.11.2020
comment
пожалуйста, посмотрите мой ответ и дайте мне знать, если у вас есть другие вопросы   -  person Ismail Diari    schedule 07.11.2020


Ответы (1)


ты можешь сделать это

var groupedShifts = 
    OShifts.GroupBy(sh => new { sh.WiDate.Year, sh.WiDate.Month },(key,group)=>new {
            Period=`${key.Year}-${key.Month}`
            SumRevenue = group.Sum(sh=>Decimal.Parse(sh.Revenue))
   }).ToList();

Я предполагаю, что ваш Shift.Revenue является безопасным десятичным значением и не может быть чем-то другим. Здесь я возвращаю список объектов, каждый из которых имеет период и сумму дохода, но вы можете настроить возврат по своему усмотрению.

person Ismail Diari    schedule 07.11.2020
comment
Спасибо .. извините, возможно, я неправильно истолковал ваше решение, но я не уверен, как извлекать данные из этого .. Похоже, решение предоставляет 1 объект, и я не понимаю, как извлекать SumRevenue в месяц .. Извините, я очень новичок в разработке и так что я полный новичок и понимаю, что это, скорее всего, связано с отсутствием у меня опыта. - person Chris Smith; 07.11.2020
comment
Ничего страшного, все мы пришли оттуда :), на самом деле, когда вы используете GroupBy и упоминаете ``` new { sh.WiDate.Year, sh.WiDate.Month } ```, вы группируете по годам и месяцам, Как ты хочешь. в вашем примере у вас будет одна группа для года = 2020, месяца = 05 - person Ismail Diari; 07.11.2020
comment
Извините, я, вероятно, сведу вас с ума на этом этапе, но я все еще в замешательстве. Вы предлагаете мне запускать код, который вы любезно предоставили, для каждого года, месяца, который я хочу извлечь значение Sum.Revenue для.. Например, чтобы получить Sum.Revenue для '2020', '04' Мне нужно изменить запрос на:? var groupedShifts = OShifts.GroupBy(sh =› new { sh.WiDate.Year, sh.WiDate.Month }, (key, group) =› new { Year = 2020, Month = 04, SumRevenue = group.Sum(sh = › Decimal.Parse(sh.Revenue)) }).ToList(); - person Chris Smith; 07.11.2020
comment
Если я немного переформулирую это, это может помочь. По сути, есть ли способ извлечь доход за год, месяц и сумму для каждого, чтобы у меня было значение суммы дохода для: 2020 - 01 2020 - 02 2020 - 03 и т. д. - возможно, CSV жало может быть проще? По сути, результат, который я ищу, - это показатель суммы доходов за каждый месяц каждого года. Затем я использую эти значения для заполнения точек данных для моего графика. - person Chris Smith; 07.11.2020
comment
Пожалуйста, посмотрите обновление, которое я сделал, теперь у вас есть суммарный доход за каждый период. - person Ismail Diari; 07.11.2020