Проблема заключается в том, что вы делаете фильтр для диапазона дат в выборе точек данных, что означает, что вы не получите никаких точек данных для значений за пределами этого диапазона.Если бы вы делали это непосредственно в SQL, вам пришлось бы использовать табличную переменную (или какую-либо другую временную таблицу или коллекцию диапазонов дат), а затем выполнить левое соединение с этими ошибками, чтобы получить список, содержащий нулевые значенияправая сторона вашего соединения.Я предполагаю, что у вас нет таблицы в SQL, для которой вы ведете соединение.Если нет, вот что я бы посоветовал попробовать (это не очень эффективно, но это решает вашу проблему):
var today = DateTime.Today;
var beginningOfCurrentMonth = DateTime.Now.AddDays(-(today.Day - 1));
// get list of previous 12 month date ranges
var dateRanges = new List<List<DateTime>>();
for (int i = 0; i < 12; i++)
dateRanges.Add(new List<DateTime>() { today.AddMonths(-i), today.AddMonths(-i + 1) });
// get your apps
var appList = from a in apps
select new
{
AppId = a.Id,
AppName = a.Name
}.ToList();
// get final list by looping through each app...
var finalList = appList.Select(app => new
{
AppId = app.AppId,
AppName = app.AppName,
// and then loop through each date range value and do a select to get data poitn information.
DataPoints = dateRanges.Select(dateRange =>
(from e in errs
join ei in errInstances on e.Id equals ei.ErrorId
where (e.ApplicationId == app.AppId && ei.stampUTC >= dateRange[0] && ei.stampUTC < dateRange[1])
group ei by new { ei.stampUTC.Month, ei.stampUTC.Year } into grp
select new { Year = grp.Key.Year, Month = grp.Key.Month, Count = grp.Count() })
)
});
Я не проверял это, так как у меня нет ваших сущностей данных,поэтому я прошу прощения, если у меня есть некоторые ошибки при печати.