2016-02-22 4 views
1

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

var result = tIncidentReportings 
    .AsEnumerable() 
    .GroupBy(c => c.Date.ToString("MMM")) 
    .Select(g => new { Month = g.Key, Count = g.Count() }) 
    .OrderBy(x => DateTime.ParseExact((x.Month).ToString(), "MMM", CultureInfo.InvariantCulture)); 
+0

Можете ли вы показать нам запрос? –

+0

приведенный выше код – Serg

+0

@Serg Я обновил свой ответ, чтобы иметь больше смысла. Дайте мне знать, если это не сработает. –

ответ

1

Проблема в том, что у вас будут отсутствующие месяцы в течение любых месяцев нет отчетов. Вам нужно будет проверить, в каких месяцах их нет, и добавить их вручную.

var result = tIncidentReportings 
    .AsEnumerable() 
    .GroupBy(c => c.Date.ToString("MMM")) 
    .Select(g => new { Month = g.Key, Count = g.Count() }) 
    .OrderBy(x => DateTime.ParseExact((x.Month).ToString(), "MMM", CultureInfo.InvariantCulture)); 
var months = 
System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthGenitiveNames.Select(s => s.Substring(0,3)).ToList(); 
months.foreach(m => { 
    if(!results.Select(r => r.Month).Contains(m)){ 
     results.Add(new {Month = m, Count = 0}; 
}); 

Что-то вроде этого

Или переписывание:

var months = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthGenitiveNames.Select(s => s.Substring(0,3)).ToList(); 
var reports = months.Select(m => 
    new { 
     Month = m, 
     Count = tIncidentReportings.AsEnumerable().Where(i => i.Date.ToString("MMM") == m).Count() 
    } 
).OrderBy(x => DateTime.ParseExact((x.Month).ToString(), "MMM", CultureInfo.InvariantCulture)).ToList(); 
+0

результат переменная = months.Select (т => новый { месяц = ​​м, граф = tIncidentReportings.Where (я => i.Date.ToString ("МММ") == м) .Count()} ) .OrderBy (x => DateTime.ParseExact ((x.Month) .ToString(), "MMM", CultureInfo.InvariantCulture)). ToList(); В этом случае я получил ошибку - LINQ to Entities не распознает метод «System.String ToString (System.String)», и этот метод не может быть переведен в выражение хранилища. – Serg

+0

Добавить 'AsEnumerable()' на 'tIncidentReportings' перед' Where() ' –

+0

Да, это работает. Большое вам спасибо за помощь !!! Я просто создал список месяцев вручную, потому что ваш код возвращает 13 элементов (12 месяцев и пустая строка, которые вызывают ошибку). У вашего первого кода нет ошибки, но ничего не делать :). – Serg

Смежные вопросы