public static IEnumerable<ScheduleRow> FromTable(ScheduleTable table, CQ tableElement)
        {
            var groupedItems = FromTable(tableElement).GroupBy(x => new { x.StartTime, x.EndTime }).ToList();

            foreach (var group in groupedItems)
            {
                var items = group.GroupBy(x => x.Title).Select(x => x.First()).ToList();

                string title = $"{group.Key.StartTime.ToString(@"hh\:mm")} - {group.Key.EndTime.ToString(@"hh\:mm")}";

                yield return new ScheduleRow(table, title, items);
            }
        }
        private static ScheduleTable FromScheduleDay(ScheduleTableDay scheduleTableDay)
        {
            string title = scheduleTableDay.TitleElement.Text();

            var headers = GetHeaders(scheduleTableDay.TableElement).ToList();

            var scheduleTable = new ScheduleTable(title, headers);

            var rows = ScheduleRow.FromTable(scheduleTable, scheduleTableDay.TableElement).ToList();
            foreach (var row in rows)
            {
                scheduleTable.Rows.Add(row);
            }

            return scheduleTable;
        }
        public ScheduleRow(ScheduleTable table, string title, IList<ScheduleItem> items)
        {
            if (table == null)
            {
                throw new ArgumentNullException(nameof(table));
            }
            if (title == null)
            {
                throw new ArgumentNullException(nameof(title));
            }
            if (items == null)
            {
                throw new ArgumentNullException(nameof(items));
            }

            this.Table = table;
            this.Title = title;
            this.Items = items;
        }