< 返回新闻公共列表
C# 根据天、周、月汇总统计生成统计报表
发布时间:
先看核心代码:
public List 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(query.AsQueryable(), x => new { x.Date.Day });
//注意根据周分组统计 if (groupby.Equals("2")) groupBy = DynamicQueryable.GroupBy(query.AsQueryable(), x => new { Week = x.Date.Date.GetWeekOfYear() }); else if (groupby.Equals("3")) //注意根据月分组统计 groupBy = DynamicQueryable.GroupBy(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> GroupBy
(IQueryable query, Expression> keySelector)
{
return query.GroupBy(keySelector);
}
public static ObservableCollection ToObservableCollection(this IEnumerable col) { return new ObservableCollection(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