예제 #1
0
        internal gsWhereClause GetWhereClause(BooleanExpression searchCondition)
        {
            gsWhereClause whereClause = new gsWhereClause();

            GetWhereClause(searchCondition, whereClause);

            return(whereClause);
        }
예제 #2
0
        internal void GetWhereClause(BooleanExpression searchCondition, gsWhereClause whereClause)
        {
            if (searchCondition is BooleanComparisonExpression)
            {
                gsWhereTermBase whereTerm = GetWhereTerm(searchCondition as BooleanComparisonExpression);
                whereClause.Terms.Add(whereTerm);
            }
            else if (searchCondition is BooleanParenthesisExpression)
            {
                var           booleanParenthesisExpression = searchCondition as BooleanParenthesisExpression;
                gsWhereClause subClause = GetWhereClause(booleanParenthesisExpression.Expression);
                whereClause.SubClauses.Add(subClause);
            }
            else if (searchCondition is BooleanIsNullExpression)
            {
                gsWhereTermBase whereTerm = GetWhereTerm(searchCondition as BooleanIsNullExpression);
                whereClause.Terms.Add(whereTerm);
            }
            else if (searchCondition is BooleanBinaryExpression)
            {
                var booleanBinaryExpression = searchCondition as BooleanBinaryExpression;

                whereClause.Relationship = booleanBinaryExpression.BinaryExpressionType == BooleanBinaryExpressionType.And ? gsWhereClauseRelationship.And : gsWhereClauseRelationship.Or;

                if (booleanBinaryExpression.FirstExpression.IsBinaryExpression())
                {
                    gsWhereClause subClause = new gsWhereClause();
                    whereClause.SubClauses.Add(subClause);
                    GetWhereClause(booleanBinaryExpression.FirstExpression, subClause);
                }
                else
                {
                    GetWhereClause(booleanBinaryExpression.FirstExpression, whereClause);
                }

                if (booleanBinaryExpression.SecondExpression.IsBinaryExpression())
                {
                    gsWhereClause subClause = new gsWhereClause();
                    whereClause.SubClauses.Add(subClause);
                    GetWhereClause(booleanBinaryExpression.SecondExpression, subClause);
                }
                else
                {
                    GetWhereClause(booleanBinaryExpression.SecondExpression, whereClause);
                }
            }
            else if (searchCondition is LikePredicate)
            {
                gsWhereTermBase whereTerm = GetWhereTerm(searchCondition as LikePredicate);
                whereClause.Terms.Add(whereTerm);
            }
            else if (searchCondition is ExistsPredicate)
            {
                gsWhereTermBase whereTerm = GetWhereTerm(searchCondition as ExistsPredicate, gsExistsOrNotExists.Exists);
                whereClause.Terms.Add(whereTerm);
            }
            else if (searchCondition is BooleanNotExpression)
            {
                if ((searchCondition as BooleanNotExpression).Expression is ExistsPredicate)
                {
                    gsWhereTermBase whereTerm = GetWhereTerm((searchCondition as BooleanNotExpression).Expression as ExistsPredicate, gsExistsOrNotExists.NotExists);
                    whereClause.Terms.Add(whereTerm);
                }
                else
                {
                    throw new NotImplementedException($"BooleanNotExpression of type {(searchCondition as BooleanNotExpression).Expression.GetType().Name} not supported");
                }
            }
            else if (searchCondition is InPredicate)
            {
                gsWhereTermBase whereTerm = GetWhereTerm(searchCondition as InPredicate, (searchCondition as InPredicate).NotDefined);
                whereClause.Terms.Add(whereTerm);
            }
            else
            {
                throw new NotImplementedException($"BooleanExpression of type {searchCondition.GetType().Name} not supported");
            }
        }