描述:查询一段时间内,按月份分组数据
- 分两类情况,当是同一年的月份和不同年的月份
- 月份不在同一年,先按年份分组
- queryCondition.FromDateTime:起始日期
- queryCondition.ToDateTime:结束日期
- ContourNumByMonthOutputDto:返回类型
public class ContourNumByMonthOutputDto
{
public DateTime MonthDate { get; set; }
public int NumberOfRois { get; set; }
}
private List<ContourNumByMonthOutputDto> TestRoiIncrementData(ContourNumByMonthInputDto queryCondition)
{
try
{
var allTestSeries = AddAllSeries();
var testRois = new List<ROI>();
foreach (var series in allTestSeries)
{
foreach (var roi in series.Rois)
{
testRois.Add(roi);
}
}
if (queryCondition.FromDateTime == null)
{
queryCondition.FromDateTime = testRois.Min(item => item.ContourDate);
}
if (queryCondition.ToDateTime == null)
{
queryCondition.ToDateTime = testRois.Max(item => item.ContourDate);
}
if (queryCondition.FromDateTime != null && queryCondition.ToDateTime != null)
{
queryCondition.FromDateTime = new DateTime(queryCondition.FromDateTime.Value.Year, queryCondition.FromDateTime.Value.Month, 1);
queryCondition.ToDateTime = new DateTime(queryCondition.ToDateTime.Value.Year, queryCondition.ToDateTime.Value.Month,
DateTime.DaysInMonth(queryCondition.ToDateTime.Value.Year,queryCondition.ToDateTime.Value.Month));
var testRoisByDate = testRois.WhereIf(queryCondition.FromDateTime != null,
item => item.ContourDate > queryCondition.FromDateTime.Value.Date)
.WhereIf(queryCondition.ToDateTime != null,
item => item.ContourDate <= queryCondition.ToDateTime)
.ToList();
testRois = testRoisByDate;
}
if (queryCondition.FromDateTime.Value.Year == queryCondition.ToDateTime.Value.Year)
{
var dtoGroup = testRois.GroupBy(item => item.ContourDate.Month);
var dtoQuery = from item in dtoGroup
select new ContourNumByMonthOutputDto
{
MonthDate = new DateTime(queryCondition.FromDateTime.Value.Year, item.Key, 0),
NumberOfRois = item.Count()
};
return dtoQuery.ToList();
}
else
{
var dtoQuery = new List<ContourNumByMonthOutputDto>();
var dtoGroupByYear = testRois.GroupBy(item => item.ContourDate.Year);
foreach (var yearItemGroup in dtoGroupByYear)
{
var dtoGroupByMonth = yearItemGroup.GroupBy(item => item.ContourDate.Month);
var dtoItems = from item in dtoGroupByMonth
select new ContourNumByMonthOutputDto
{
MonthDate = new DateTime(yearItemGroup.Key, item.Key,1),
NumberOfRois = item.Count()
};
foreach (var item in dtoItems)
{
var dto = new ContourNumByMonthOutputDto();
dto.MonthDate = item.MonthDate;
dto.NumberOfRois = item.NumberOfRois;
dtoQuery.Add(dto);
}
}
return dtoQuery.ToList().OrderBy(item => item.MonthDate).ToList();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
private List<Session> AddAllSessions()
{
var sessionList = new List<Session>();
Random rd = new Random();
var userList = new List<string>();
userList.Add("zhangsan");
userList.Add("lisi");
userList.Add("wangwu");
var clinicList = new List<ClinicDto>();
clinicList.Add(new ClinicDto {
ClinicId =1,
ClinicName ="Clinic1"
});
clinicList.Add(new ClinicDto
{
ClinicId = 2,
ClinicName = "Clinic2"
});
clinicList.Add(new ClinicDto
{
ClinicId = 3,
ClinicName = "Clinic3"
});
for (int i = 0; i < 1000; i++)
{
var session = new Session();
session.User = userList[rd.Next(0, 2)];
session.AppointmentDate = DateTime.Today.AddDays(rd.Next(0, 30)).Date;
session.TreatmentDate = DateTime.Today.AddDays(-rd.Next(0, 30)).Date;
session.Status = rd.Next(0, 2);
session.IGRTType = rd.Next(0, 3);
session.DataType = rd.Next(0, 1);
session.Clinic = clinicList[rd.Next(0, 2)];
sessionList.Add(session);
}
return sessionList;
}