public void FilterGroupTest() { FilterGroup group = new FilterGroup(); Assert.Equal(group.Operate, FilterOperate.And); Assert.NotEqual(group.Rules, null); Assert.NotEqual(group.Groups, null); }
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))); }
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); }