public void GetExpressionTest() { IQueryable<TestEntity> source = Entities.AsQueryable(); //空条件 Expression<Func<TestEntity, bool>> predicate = FilterHelper.GetExpression<TestEntity>(); Assert.IsTrue(source.Where(predicate).SequenceEqual(source)); //单条件,属性不存在 FilterRule rule = new FilterRule("Name1", "5", FilterOperate.EndsWith); FilterRule rule1 = rule; ExceptionAssert.IsException<MesException>(() => FilterHelper.GetExpression<TestEntity>(rule1)); //单条件 rule = new FilterRule("Name", "5", FilterOperate.EndsWith); predicate = FilterHelper.GetExpression<TestEntity>(rule); Assert.IsTrue(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.IsTrue(source.Where(predicate).SequenceEqual(source.Where(m => m.Name.Length > 5))); //多条件,异常 ExceptionAssert.IsException<MesException>(() => 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.IsTrue(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.IsTrue(source.Where(predicate).SequenceEqual(source.Where(m => m.AddDate > dt || m.Name.Length > 5 && m.IsDeleted))); }
public void CreateExcel2(string fromDate, string endDate) { const string problemTime = "ProblemTime"; const string isDeleted = "IsDeleted"; fromDate.CheckNotNullOrEmpty("fromDate"); endDate.CheckNotNullOrEmpty("endDate"); DateTime beginTime = Conv.ToDate(fromDate); DateTime endTime = Conv.ToDate(endDate); FilterGroup group = new FilterGroup { Rules = new List<FilterRule> { new FilterRule(problemTime, beginTime, FilterOperate.GreaterOrEqual), new FilterRule(problemTime, endTime.AddDays(1), FilterOperate.LessOrEqual), new FilterRule(isDeleted, false, FilterOperate.Equal) }, Operate = FilterOperate.And }; Expression<Func<Problem, bool>> predicate = FilterHelper.GetExpression<Problem>(@group); var cpks = SiteManagementContract.Problems.Where(predicate).Select(m => new { m.ProblemTime, m.Department, m.Factory, m.QuestionFrom, m.Detail, m.Reason, m.Solution, m.IsComplete, m.IsPeople, m.Workers, m.Suggestion, m.Remark, m.Type, m.CreatedTime }); Excel(cpks, "Problem" + DateTime.Now.ToString("yyyyMMddhhmmss")); }
private object Data(string fromDate,string endDate,string groupByFiled) { const string problemTime = "ProblemTime"; const string isDeleted = "IsDeleted"; fromDate.CheckNotNullOrEmpty("fromDate"); endDate.CheckNotNullOrEmpty("endDate"); // DateTime date = Conv.ToDate(fromDate); DateTime beginTime=Conv.ToDate(fromDate); DateTime endTime = Conv.ToDate(endDate); //if (date.DayOfWeek != 0) //{ // beginTime = date.AddDays((double)(1 - date.DayOfWeek)); // endTime = date.AddDays((double)(8 - date.DayOfWeek)); //} //else //{ // endTime = date; // beginTime = date.AddDays(-6); //} var xAxisdata = new ArrayList(); //部门辅助开关 var legenddata = new ArrayList(); //标题 const string titletext = "异常统计"; //子标题 var titlesubtext = beginTime.ToString("yyyyMMdd") + "-" + endTime.ToString("yyyyMMdd"); for (int i = 0; i < endTime.DayOfYear - beginTime.DayOfYear+1; i++) { xAxisdata.Add(beginTime.AddDays(i).ToDateString()); } FilterGroup group = new FilterGroup { Rules = new List<FilterRule> { new FilterRule(problemTime, beginTime, FilterOperate.GreaterOrEqual), new FilterRule(problemTime, endTime.AddDays(1), FilterOperate.LessOrEqual), new FilterRule(isDeleted, false, FilterOperate.Equal) }, Operate = FilterOperate.And }; Expression<Func<Problem, bool>> predicate = FilterHelper.GetExpression<Problem>(@group); var delayTimes = SiteManagementContract.Problems.Where(predicate).ToList(); IEnumerable<IGrouping<string, Problem>> dutyGroupList; //分组 if (groupByFiled=="workers") dutyGroupList = delayTimes.GroupBy(g => g.Workers); else dutyGroupList = delayTimes.GroupBy(g => g.Department); var seriesList = new ArrayList(); foreach (var dutyGroup in dutyGroupList) { legenddata.Add(dutyGroup.Key); var dutyhourlist = new ArrayList(); for (int i = 0; i < endTime.DayOfYear - beginTime.DayOfYear + 1; i++) { int b = dutyGroup.AsQueryable().Count(g => g.ProblemTime.ToDateString() == beginTime.AddDays(i).ToDateString()); dutyhourlist.Add(b); } 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 = dutyGroup.Key, type = "line", data = dutyhourlist, markPoint, markLine }; seriesList.Add(seriestest1); } var data = new { seriesList, xAxisdata, legenddata, titletext, titlesubtext }; return data; }