예제 #1
0
 public void FilterGroupTest()
 {
     FilterGroup group = new FilterGroup();
     Assert.Equal(group.Operate, FilterOperate.And);
     Assert.NotEqual(group.Rules, null);
     Assert.NotEqual(group.Groups, null);
 }
예제 #2
0
        public void GetExpressionTest()
        {
            IQueryable<TestEntity> source = Entities.AsQueryable();

            //空条件
            Expression<Func<TestEntity, bool>> predicate = FilterHelper.GetExpression<TestEntity>();
            Assert.True(source.Where(predicate).SequenceEqual(source));

            //单条件,属性不存在
            FilterRule rule = new FilterRule("Name1", "5", FilterOperate.EndsWith);
            FilterRule rule1 = rule;
            Assert.Throws<OSharpException>(() => FilterHelper.GetExpression<TestEntity>(rule1));

            //单条件
            rule = new FilterRule("Name", "5", FilterOperate.EndsWith);
            predicate = FilterHelper.GetExpression<TestEntity>(rule);
            Assert.True(source.Where(predicate).SequenceEqual(source.Where(m => m.Name.EndsWith("5"))));

            //二级条件
            rule = new FilterRule("Name.Length", 5, FilterOperate.Greater);
            predicate = FilterHelper.GetExpression<TestEntity>(rule);
            Assert.True(source.Where(predicate).SequenceEqual(source.Where(m => m.Name.Length > 5)));

            //多条件,异常
            Assert.Throws<OSharpException>(() => new FilterGroup
            {
                Rules = new List<FilterRule> { rule, new FilterRule("IsDeleted", true) },
                Operate = FilterOperate.Equal
            });

            //多条件
            FilterGroup group = new FilterGroup
            {
                Rules = new List<FilterRule> { rule, new FilterRule("IsDeleted", true) },
                Operate = FilterOperate.And
            };
            predicate = FilterHelper.GetExpression<TestEntity>(group);
            Assert.True(source.Where(predicate).SequenceEqual(source.Where(m => m.Name.Length > 5 && m.IsDeleted)));

            //条件组嵌套
            DateTime dt = DateTime.Now;
            group = new FilterGroup
            {
                Rules = new List<FilterRule>
                {
                    new FilterRule("AddDate", dt, FilterOperate.Greater)
                },
                Groups = new List<FilterGroup> { group },
                Operate = FilterOperate.Or
            };
            predicate = FilterHelper.GetExpression<TestEntity>(group);
            Assert.True(source.Where(predicate).SequenceEqual(source.Where(m => m.AddDate > dt || m.Name.Length > 5 && m.IsDeleted)));
        }
예제 #3
0
        public virtual ActionResult Report3(string fromDate, string toDate, string field)
        {
            field = "WorkDate";
            string field2 = "Line";
            toDate.CheckNotNullOrEmpty("fromDate");
            toDate.CheckNotNullOrEmpty("toDate");
            // ReSharper disable once InconsistentNaming
            int _fromDate = Convert.ToInt32(fromDate.Replace("-", ""));
            // ReSharper disable once InconsistentNaming
            int _toDate = Convert.ToInt32(toDate.Replace("-", ""));
            //x坐标节点
            var xAxisdata = new ArrayList();
            //部门辅助开关
            var legenddata = new ArrayList();
            //标题
            const string titletext = "异常工时";
            //子标题
            var titlesubtext = _fromDate + "-" + _toDate;
            FilterGroup group = new FilterGroup
            {
                Rules = new List<FilterRule>
                { new FilterRule(field, _fromDate, FilterOperate.Greater),
                  new FilterRule(field, _toDate, FilterOperate.LessOrEqual) },
                Operate = FilterOperate.And
            };
            Expression<Func<DelayTime, bool>> predicate = FilterHelper.GetExpression<DelayTime>(group);
            var delayTimes = DelayTimeContract.DelayTimes.Where(predicate).ToList();

            var dutyList = delayTimes.Select(a => a.Duty).Distinct();

            var dutyWorkdateHourList = new ArrayList();
            for (int i = 0; i < _toDate - _fromDate + 1; i++)
            {
                xAxisdata.Add(_fromDate + i);
            }
            foreach (var duty in dutyList)
            {
                var dutyhourlist = new ArrayList();
                for (int i = 0; i < _toDate - _fromDate + 1; i++)
                {
                    FilterGroup group2 = new FilterGroup
                    {
                        Rules = new List<FilterRule>
                            { new FilterRule(field2, duty, FilterOperate.Equal),
                              new FilterRule(field, _fromDate + i, FilterOperate.Equal) },
                        Operate = FilterOperate.And
                    };
                    Expression<Func<DelayTime, bool>> predicate2 = FilterHelper.GetExpression<DelayTime>(group2);
                    float b = delayTimes.AsQueryable().Where(predicate2).Sum(g => g.Hour);
                    dutyhourlist.Add(b);
                }
                var dutyWorkdateHour = new { duty = duty, dutyhourlist = dutyhourlist };
                dutyWorkdateHourList.Add(dutyWorkdateHour);
            }
            var seriesList = new ArrayList();
            foreach (dynamic dutyWorkdateHour in dutyWorkdateHourList)
            {
                var markPointData1 = new { type = "max", name = "最大值" };
                var markPointData2 = new { type = "min", name = "最小值" };
                var markPointList = new ArrayList() { markPointData1, markPointData2 };
                var markPoint = new { data = markPointList };

                var markLineData1 = new { type = "average", name = "平均值" };
                var markLineList = new ArrayList() { markLineData1 };
                var markLine = new { data = markLineList };
                var seriestest1 = new { name = dutyWorkdateHour.duty, type = "line", data = dutyWorkdateHour.dutyhourlist, markPoint = markPoint, markLine = markLine };
                legenddata.Add(dutyWorkdateHour.duty);
                seriesList.Add(seriestest1);

            }
            var data = new { seriesList = seriesList, xAxisdata = xAxisdata, legenddata = legenddata, titletext = titletext, titlesubtext = titlesubtext };
            return Json(data, JsonRequestBehavior.AllowGet);
        }