Вы должны создать несколько фиктивных данных, чтобы заполнить пробелы.Поскольку вы делаете Sum
, вы можете просто создать несколько макетов для ваших входных данных.
Для этого я предположил, что Set
- это List<SourceData>
- измените это при необходимости:
public class SourceData
{
public DateTime Date { get; set; }
public long TotalHours { get; set; }
}
public class GraphData
{
public DateTime Date { get; set; }
public long TotalHoursCount { get; set; }
}
Затем я добавил метод для получения диапазона дат (исключая верхнюю границу):
public static IEnumerable<DateTime> GetDateRange(DateTime startDate, DateTime endDate)
{
return Enumerable.Range(0, (endDate - startDate).Days).Select(d => startDate.AddDays(d));
}
Наконец, я обновил ваш метод GetDataWiseUsage для генерации диапазона дат ипреобразовать его в фиктивные исходные данные:
public static List<GraphData> GetDateWiseUsage(DateTime startDate, DateTime endDate)
{
return Set.Where(x => x.Date >= startDate.Date && x.Date < endDate.Date)
.Concat(GetDateRange(startDate, endDate).Select(date => new SourceData() { Date = date, TotalHours = 0 }))
.GroupBy(x => x.Date.Date)
.Select(x => new GraphData { Date = x.Key, TotalHoursCount = x.Sum(i => i.TotalHours) }).ToList();
}
Я изменил ваш код на группу на x.Date.Date
, а не x.Date
, так как кажется, что вы хотите отдельную группировку в день, а не по уникальнойвремя.Группировка по не сгруппирует фиктивные данные с реальными данными, а разложит их в сумму.
Вы могли бы добавить фиктивные данные впоследствии , но это кажется проще/ меньше работы, чтобы сделать это заранее.