internal gsWhereClause GetWhereClause(BooleanExpression searchCondition) { gsWhereClause whereClause = new gsWhereClause(); GetWhereClause(searchCondition, whereClause); return(whereClause); }
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"); } }