我有一個包含以下類型對象的列表。該列表當前按升序排列。使用Lambda或LINQ Query按給定日期範圍按年份和月份分組
public class ReportsCountByDate{
public int CountOfReports { get ; set ;}
public DateTime ReportGeneratedDate { get ;set ;}
}
我的數據集:
CountOfReports ReportGeneratedDate
3 2017-02-07
5 2017-02-21
5 2017-03-12
1 2017-05-03
4 2017-05-23
3 2017-06-12
[請注意,沒有repot 2017年四月] 如果我需要從2017年一月到2017年七月得到報告數。
CountOfReports YearAndMonth
0 2017-01
8 2017-02
5 2017-03
0 2017-04
5 2017-05
3 2017-06
0 2017-07
有人能指出我如何使用Lambda
或LINQ
查詢得到下面的結果。
更新:
這是我的代碼。
var startYear = input.durationStartDate.Year;
var startMonth = input.durationStartDate.Month;
var endYear = input.durationEndDate.Year;
var endMonth = input.durationEndDate.Month;
var yearRange = (endYear - startYear) == 0 ? 1 : (endYear - startYear);
var monthRange = ((input.durationEndDate.Year - input.durationStartDate.Year) * 12 + input.durationEndDate.Month - input.durationStartDate.Month) == 0 ? 1 : ((input.durationEndDate.Year - input.durationStartDate.Year) * 12 + input.durationEndDate.Month - input.durationStartDate.Month);
var desposition = await _dispositionSummaryManager.GetDispositionFormByCreateDate(input.platform, input.durationStartDate, input.durationEndDate);
var changesPerYearAndMonth =
from year in Enumerable.Range(startYear, yearRange)
from month in Enumerable.Range(startMonth, monthRange)
let key = new { Year = year, Month = month }
join ReportsCountByDate in desposition on key
equals new
{
ReportsCountByDate.ReportGeneratedDate.Year,
ReportsCountByDate.ReportGeneratedDate.Month
} into g
select new { GroupCriteria = key, Count = g.Count() };
你可以嘗試先 –
建議**重構你的數據結構**簡化LINQ。在'我的數據集'中,添加'Year'和'Month'兩個屬性,並且所有輸入值也可以是年份和月份。 –
@雷洋謝謝。有關如何設定日期範圍的建議? – NoughT