/// <summary> /// Creates <see cref="OrCondition"/> between left and right <see cref="IList{T}"/>s. /// List of conditions in parameters unite inside by <see cref="AndCondition"/>. /// </summary> /// <param name="leftConditions">conditions which will be created as <see cref="AndCondition"/>.</param> /// <param name="rightConditions">conditions which will be created as <see cref="AndCondition"/>.</param> public OrCondition(IList<BaseCondition> leftConditions, IList<BaseCondition> rightConditions) : this() { if (leftConditions == null || leftConditions.Count == 0) { throw new SpoltyException("leftConditions is incorrect"); } if (rightConditions == null) { throw new SpoltyException("rightConditions is incorrect"); } LeftCondition = new AndCondition(leftConditions); if (rightConditions.Count > 0) { RightCondition = new AndCondition(rightConditions); } }
public Expression Make(IEnumerable<BaseCondition> conditions, Expression sourceExpression) { Checker.CheckArgumentNull(conditions, "conditionals"); Checker.CheckArgumentNull(sourceExpression, "sourceExpression"); var condition = new AndCondition(conditions); if (condition.LeftCondition == null) { return sourceExpression; } Type sourceType = ExpressionHelper.GetGenericType(sourceExpression); ParameterExpression parameterExpression = ExpressionHelper.CreateOrGetParameterExpression(sourceType, sourceType.Name, Factory.Store); Expression body = MakeConditionExpression(condition, parameterExpression, ref sourceExpression); if (body != null) { sourceExpression = MakeWhere(sourceType, sourceExpression, body, parameterExpression); } return sourceExpression; }