zoukankan      html  css  js  c++  java
  • C# 根据天、周、月汇总统计生成统计报表

    先看核心代码:

         public List<DataEntity> SearchShopSalesReport(DateTimeOffset? dateFrom, DateTimeOffset? dateTo,string groupBy)   
    {
    var query = data.DataEntity //这里data为DbContext .AsEnumerable(); if (dateFrom.HasValue) query = query.Where(x => x.Date >= dateFrom); if (dateTo.HasValue) query = query.Where(x => x.Date <= dateTo);        
           //注意根据天分组统计
    var groupBy = DynamicQueryable.GroupBy<DataEntity, dynamic>(query.AsQueryable(), x => new { x.Date.Day });        
           //
    注意根据周分组统计
          if (groupby.Equals("2"))
            groupBy
    = DynamicQueryable.GroupBy<DataEntity, dynamic>(query.AsQueryable(), x => new { Week = x.Date.Date.GetWeekOfYear() });
          else if (groupby.Equals("3")) //注意根据月分组统计
            groupBy
    = DynamicQueryable.GroupBy<DataEntity, dynamic>(query.AsQueryable(), x => new { x.Date.Month });

          query
    = groupBy.Select(g => new DataEntity {
            ShopId
    = g.FirstOrDefault().ShopId,
            MarketplaceId
    = g.FirstOrDefault().MarketplaceId,
            Date
    = g.FirstOrDefault().Date,
            Sessions
    = g.Sum(x => x.Sessions),
            
    BoxPercentage = g.Average(x => x.BuyBoxPercentage)
          }).ToObservableCollection();

        return query.ToList();

     DynamicQueryable.GroupBy()与ToObservableCollection()还有GetWeekOfYear()方法

       public static class DynamicQueryable
        {        public static IQueryable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>        
                 (IQueryable<TSource> query, Expression<Func<TSource, TKey>> keySelector)
            {
                  return query.GroupBy(keySelector);
            }
          
        

    public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> col)
    {
    return new ObservableCollection<T>(col);
    }


    }

    public static class DateTimeExtension
    {
    public static int GetWeekOfYear(this DateTime dt)
    {
    GregorianCalendar calendar = new GregorianCalendar();
    return calendar.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);//注意这里一周是以星期一为第一天
    }
    }


    前端图表显示使用插件:echarts 官网为:https://www.echartsjs.com/zh/index.html
  • 相关阅读:
    VMWare虚拟机15.X局域网网络配置(修改网卡)
    Redis的中并发问题的解决方案小结
    搭建一个dubbo+zookeeper平台
    react与redux学习资料的整理
    如何利用python+Selenium对登录的验证码进行验证?
    (基础篇)哪些面试遇见的坑——面试必看基础题
    测试员小白必经之路----常见的linux操作命令
    测试员小白必经之路----常见的Dos命令
    Elastcisearch.Nest 7.x 系列`伪`官方翻译:通过 NEST 来快捷使用 Elasticsearch
    StackExchange.Redis 系列 1:基础使用
  • 原文地址:https://www.cnblogs.com/moon3/p/12723910.html
Copyright © 2011-2022 走看看