protected LiteFilter GetFilterForMultiColumns(string tableAlias, string fields, object o)
        {
            List <string> list = (from p in fields.Split(new char[] { ',' })
                                  where !string.IsNullOrEmpty(p)
                                  select p).ToList <string>();
            LiteFilter filter = LiteFilter.False();

            foreach (string str in list)
            {
                filter = filter.Or(FilterField.New(tableAlias, str).Contains(o));
            }
            return(filter);
        }
        protected LiteFilter GetFilterForMultiValues(string tableAlias, string fieldName, object o)
        {
            List <int> list = (from p in Convert.ToString(o).Split(new char[] { ',' })
                               select p.ToIntNullable() into p
                               where p.HasValue
                               select p.Value).ToList <int>();
            LiteFilter filter = LiteFilter.False();

            foreach (int num in list)
            {
                filter = filter.Or(FilterField.New(tableAlias, fieldName).Equal(num));
            }
            return(filter);
        }
示例#3
0
 private void VisitFilter(LiteFilter filter)
 {
     if ((filter.filterType == FilterTypeEnum.AND) || (filter.filterType == FilterTypeEnum.OR))
     {
         int realChildCount = filter.GetRealChildCount();
         if (realChildCount >= 2)
         {
             string str  = (filter.filterType == FilterTypeEnum.AND) ? " AND " : " OR ";
             int    num2 = -1;
             foreach (LiteFilter filter2 in filter.ChildFilters)
             {
                 if (filter2.GetRealNodeCount() > 0)
                 {
                     num2++;
                     if (num2 > 0)
                     {
                         this.sb.Append(str);
                     }
                     this.sb.Append("(");
                     this.VisitFilter(filter2);
                     this.sb.Append(")");
                 }
             }
         }
         else if (realChildCount == 1)
         {
             foreach (LiteFilter filter2 in filter.ChildFilters)
             {
                 if (filter2.GetRealNodeCount() > 0)
                 {
                     this.VisitFilter(filter2);
                 }
             }
         }
     }
     else
     {
         this.VisitConditionFilter(filter);
     }
 }
示例#4
0
        public override DataTable Query()
        {
            var q = LiteQuery.New("T_User", "a");

            q.SelectFields.Add(LiteField.NewEntityField("a", "User_ID"));
            q.SelectFields.Add(LiteField.NewEntityField("a", "User_Name"));
            q.SelectFields.Add(LiteField.NewEntityField("a", "User_Code"));
            q.SelectFields.Add(LiteField.NewEntityField("a", "Department_ID"));
            q.SelectFields.Add(LiteField.NewEntityField("a", "User_Mobile"));

            var subQ = GetRefSubQuery("T_Department", "Department_ID", "Department_Name", "a", "Department_ID");

            q.SelectFields.Add(LiteField.NewSubQueryField(subQ, "Department_ID_V"));

            q.Filter = LiteFilter.True();

            if (!string.IsNullOrEmpty(this.UserName))
            {
                var fUserName = FilterField.New("a", "User_Name").Contains(this.UserName);
                q.Filter = q.Filter.And(fUserName);
            }
            if (!string.IsNullOrEmpty(this.UserCode))
            {
                var fUserCode = FilterField.New("a", "User_Code").Contains(this.UserCode);
                q.Filter = q.Filter.And(fUserCode);
            }
            if (this.DepartmentId != null)
            {
                var fDeptId = FilterField.New("a", "Department_ID").Equal(this.DepartmentId.Value);
                q.Filter = q.Filter.And(fDeptId);
            }

            AddFilterForPrevilege(q);
            AddFilterForShared(q);

            q.SkipNumber = this.PageIndex * this.PageSize;
            q.TakeNumber = this.PageSize;

            return(this.DataHelper.ExecuteLiteQuery(q));
        }
示例#5
0
 private void VisitTwoVarFilter(LiteFilter filter, string compareOP)
 {
     this.VisitFilterVariable(filter.LeftVar);
     this.sb.Append(compareOP);
     this.VisitFilterVariable(filter.RightVar);
 }
示例#6
0
        private void VisitConditionFilter(LiteFilter filter)
        {
            switch (filter.compareType)
            {
            case CompareTypeEnum.LessThan:
                this.VisitTwoVarFilter(filter, "< ");
                break;

            case CompareTypeEnum.LessThanOrEqual:
                this.VisitTwoVarFilter(filter, "<= ");
                break;

            case CompareTypeEnum.Equal:
                this.VisitTwoVarFilter(filter, "= ");
                break;

            case CompareTypeEnum.GreaterThanOrEqual:
                this.VisitTwoVarFilter(filter, ">= ");
                break;

            case CompareTypeEnum.GreaterThan:
                this.VisitTwoVarFilter(filter, "> ");
                break;

            case CompareTypeEnum.EndWith:
                this.VisitFilterVariable(filter.LeftVar);
                if (filter.RightVar.VariableType != VariableTypeEnum.Const)
                {
                    throw new ApplicationException("EndWith只支持常量");
                }
                this.sb.AppendFormat(" like '%{0}' escape '/' ", filter.RightVar.ConstValue.ToString().Replace("'", "''").Replace("%", "/%").Replace("_", "/_"));
                break;

            case CompareTypeEnum.StartWith:
                this.VisitFilterVariable(filter.LeftVar);
                if (filter.RightVar.VariableType != VariableTypeEnum.Const)
                {
                    throw new ApplicationException("StartWith只支持常量");
                }
                this.sb.AppendFormat(" like '{0}%' escape '/' ", filter.RightVar.ConstValue.ToString().Replace("'", "''").Replace("%", "/%").Replace("_", "/_"));
                break;

            case CompareTypeEnum.Contains:
                this.VisitFilterVariable(filter.LeftVar);
                if (filter.RightVar.VariableType != VariableTypeEnum.Const)
                {
                    throw new ApplicationException("Contains只支持常量");
                }
                this.sb.AppendFormat(" like '%{0}%' escape '/' ", filter.RightVar.ConstValue.ToString().Replace("'", "''").Replace("%", "/%").Replace("_", "/_"));
                break;

            case CompareTypeEnum.NotEqual:
                this.VisitTwoVarFilter(filter, "<> ");
                break;

            case CompareTypeEnum.FullText:
                this.sb.Append(" contains((");
                this.VisitFilterVariable(filter.LeftVar);
                this.sb.Append("),'");
                this.sb.Append(this.GetFullTextValueString(filter.RightVar.ConstValue.ToString(), filter.LeftVar.FullTextType));
                this.sb.Append("')");
                break;

            case CompareTypeEnum.IN:
                this.VisitTwoVarFilter(filter, "in ");
                break;

            case CompareTypeEnum.IsNull:
                this.VisitFilterVariable(filter.LeftVar);
                this.sb.Append(" IS NULL ");
                break;

            case CompareTypeEnum.IsNotNull:
                this.VisitFilterVariable(filter.LeftVar);
                this.sb.Append(" IS NOT NULL ");
                break;
            }
        }