private IEnumerable <TopMrsSinrUlView> GetTopViews(DateTime begin, DateTime end, int topCount, OrderMrsSinrUlPolicy policy, Func <DateTime, DateTime, List <TopMrsSinrUl> > queryFunc) { if (topCount <= 0) { return(new List <TopMrsSinrUlView>()); } var orderResult = new List <TopMrsSinrUl>(); var beginDate = begin; var endDate = beginDate.AddDays(1); while (endDate < end) { var stats = queryFunc(beginDate, endDate); if (stats.Any()) { orderResult.AddRange(stats.Where(x => (double)(x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3) / (x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3 + x.SinrUlM3To0 + x.SinrUl0To3 + x.SinrUl3To6 + x.SinrUl6To9 + x.SinrUl9To12 + x.SinrUl12To15 + x.SinrUl15To18 + x.SinrUl18To21 + x.SinrUl21To24 + x.SinrUlAbove24) > 0.1).Order(policy, topCount)); } beginDate = beginDate.AddDays(1); endDate = beginDate.AddDays(1); } var containers = orderResult.GenerateContainers <TopMrsSinrUl, TopMrsSinrUlContainer>(); return(containers.Select(x => { var view = TopMrsSinrUlView.ConstructView(x.TopStat, _eNodebRepository); view.TopDates = x.TopDates; return view; })); }
public IEnumerable <TopMrsSinrUlView> GetAllTopViews(DateTime begin, DateTime end, int topCount, OrderMrsSinrUlPolicy policy) { return(GetTopViews(begin, end, topCount, policy, (beginDate, endDate) => _topMrsSinrUlRepository.GetAllList(x => x.StatDate >= beginDate && x.StatDate < endDate))); }
public IEnumerable <TopMrsSinrUlView> GetPartialTopViews(DateTime begin, DateTime end, int topCount, OrderMrsSinrUlPolicy policy, IEnumerable <ENodeb> eNodebs) { return(GetTopViews(begin, end, topCount, policy, (beginDate, endDate) => { var stats = _topMrsSinrUlRepository.GetAllList(x => x.StatDate >= beginDate && x.StatDate < endDate); return (from q in stats join e in eNodebs on q.ENodebId equals e.ENodebId select q).ToList(); })); }
public static IEnumerable <TopMrsSinrUl> Order(this IEnumerable <TopMrsSinrUl> stats, OrderMrsSinrUlPolicy policy, int topCount) { switch (policy) { case OrderMrsSinrUlPolicy.OrderByM3Rate: return (stats.OrderByDescending(x => (double)(x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3) / (x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3 + x.SinrUlM3To0 + x.SinrUl0To3 + x.SinrUl3To6 + x.SinrUl6To9 + x.SinrUl9To12 + x.SinrUl12To15 + x.SinrUl15To18 + x.SinrUl18To21 + x.SinrUl21To24 + x.SinrUlAbove24)).Take(topCount).ToList()); case OrderMrsSinrUlPolicy.OrderByM3TimesDescending: return (stats.OrderByDescending(x => x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3) .Take(topCount) .ToList()); case OrderMrsSinrUlPolicy.OrderBy0Rate: return (stats.OrderByDescending(x => (double)(x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3 + x.SinrUlM3To0) / (x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3 + x.SinrUlM3To0 + x.SinrUl0To3 + x.SinrUl3To6 + x.SinrUl6To9 + x.SinrUl9To12 + x.SinrUl12To15 + x.SinrUl15To18 + x.SinrUl18To21 + x.SinrUl21To24 + x.SinrUlAbove24)).Take(topCount).ToList()); case OrderMrsSinrUlPolicy.OrderBy0TimesDescending: return (stats.OrderByDescending(x => x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3 + x.SinrUlM3To0) .Take(topCount) .ToList()); case OrderMrsSinrUlPolicy.OrderBy3Rate: return (stats.OrderByDescending(x => (double)(x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3 + x.SinrUlM3To0 + x.SinrUl0To3) / (x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3 + x.SinrUlM3To0 + x.SinrUl0To3 + x.SinrUl3To6 + x.SinrUl6To9 + x.SinrUl9To12 + x.SinrUl12To15 + x.SinrUl15To18 + x.SinrUl18To21 + x.SinrUl21To24 + x.SinrUlAbove24)).Take(topCount).ToList()); default: return (stats.OrderByDescending(x => x.SinrUlBelowM9 + x.SinrUlM9ToM6 + x.SinrUlM6ToM3 + x.SinrUlM3To0 + x.SinrUl0To3) .Take(topCount) .ToList()); } }