C# 按照月份分组

描述:查询一段时间内,按月份分组数据

  • 分两类情况,当是同一年的月份和不同年的月份
  • 月份不在同一年,先按年份分组
  • 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;
        }
发布了78 篇原创文章 · 获赞 0 · 访问量 1271

猜你喜欢

转载自blog.csdn.net/qq_21209307/article/details/105275371