public override linq.Expression <Func <IEvaluationContext, bool> > GetExpression()
        {
            var paramX     = linq.Expression.Parameter(typeof(IEvaluationContext), "x");
            var castOp     = linq.Expression.MakeUnary(linq.ExpressionType.Convert, paramX, typeof(PromotionEvaluationContext));
            var methodInfo = typeof(PromotionEvaluationContext).GetMethod("IsItemInCategory");
            var methodCall = linq.Expression.Call(castOp, methodInfo, linq.Expression.Constant(SelectedCategoryId), ExcludingCategoryIds.GetNewArrayExpression(),
                                                  ExcludingProductIds.GetNewArrayExpression());
            var retVal = linq.Expression.Lambda <Func <IEvaluationContext, bool> >(methodCall, paramX);

            return(retVal);
        }
        public override linq.Expression <Func <IEvaluationContext, bool> > GetExpression()
        {
            var paramX     = linq.Expression.Parameter(typeof(IEvaluationContext), "x");
            var castOp     = linq.Expression.MakeUnary(linq.ExpressionType.Convert, paramX, typeof(PromotionEvaluationContext));
            var methodInfo = typeof(PromotionEvaluationContext).GetMethod("GetItemsOfCategoryQuantity");
            var methodCall = linq.Expression.Call(castOp, methodInfo, linq.Expression.Constant(SelectedCategoryId), ExcludingCategoryIds.GetNewArrayExpression(),
                                                  ExcludingProductIds.GetNewArrayExpression(), ExcludingSkuIds.GetNewArrayExpression());
            var numItem  = linq.Expression.Constant(NumItem);
            var binaryOp = ExactlyLeast.IsExactly ? linq.Expression.Equal(methodCall, numItem) : linq.Expression.GreaterThanOrEqual(methodCall, numItem);

            var retVal = linq.Expression.Lambda <Func <IEvaluationContext, bool> >(binaryOp, paramX);

            return(retVal);
        }
示例#3
0
        /// <summary>
        /// ((PromotionEvaluationContext)x).GetCartItemsOfCategoryQuantity(CategoryId, ExcludingCategoryIds, ExcludingProductIds) > NumItem
        /// </summary>
        /// <returns></returns>
        public override linq.Expression <Func <IEvaluationContext, bool> > GetConditionExpression()
        {
            var paramX                = linq.Expression.Parameter(typeof(IEvaluationContext), "x");
            var castOp                = linq.Expression.MakeUnary(linq.ExpressionType.Convert, paramX, typeof(PromotionEvaluationContext));
            var methodInfo            = typeof(PromotionEvaluationContextExtension).GetMethod("GetCartItemsOfCategoryQuantity");
            var leftOperandExpression = linq.Expression.Call(null, methodInfo, castOp, linq.Expression.Constant(CategoryId), ExcludingCategoryIds.GetNewArrayExpression(),
                                                             ExcludingProductIds.GetNewArrayExpression());
            var rightOperandExpression       = linq.Expression.Constant(NumItem);
            var rightSecondOperandExpression = linq.Expression.Constant(NumItemSecond);

            var result = linq.Expression.Lambda <Func <IEvaluationContext, bool> >(GetConditionExpression(rightOperandExpression, rightOperandExpression, rightSecondOperandExpression), paramX);

            return(result);
        }
示例#4
0
        public override linq.Expression <Func <IEvaluationContext, bool> > GetExpression()
        {
            var paramX          = linq.Expression.Parameter(typeof(IEvaluationContext), "x");
            var castOp          = linq.Expression.MakeUnary(linq.ExpressionType.Convert, paramX, typeof(PromotionEvaluationContext));
            var lineItemTotal   = linq.Expression.Constant(LineItemTotal);
            var methodInfo      = typeof(PromotionEvaluationContext).GetMethod("IsAnyLineItemTotal");
            var equalsOrAtLeast = ExactlyLeast.IsExactly ? linq.Expression.Constant(true) : linq.Expression.Constant(false);
            var methodCall      = linq.Expression.Call(castOp, methodInfo, lineItemTotal, equalsOrAtLeast, ExcludingCategoryIds.GetNewArrayExpression(),
                                                       ExcludingProductIds.GetNewArrayExpression(), ExcludingSkuIds.GetNewArrayExpression());

            var retVal = linq.Expression.Lambda <Func <IEvaluationContext, bool> >(methodCall, paramX);

            return(retVal);
        }
        /// <summary>
        /// ((PromotionEvaluationContext)x).IsItemInCategory(CategoryId, ExcludingCategoryIds, ExcludingProductIds)
        /// </summary>
        public override bool IsSatisfiedBy(IEvaluationContext context)
        {
            var result = false;

            if (context is PromotionEvaluationContext promotionEvaluationContext)
            {
                result = promotionEvaluationContext.IsItemInCategory(CategoryId, ExcludingCategoryIds.ToArray(), ExcludingProductIds.ToArray());
            }

            return(result);
        }
示例#6
0
        /// <summary>
        /// ((PromotionEvaluationContext)x).GetCartItemsOfCategoryQuantity(CategoryId, ExcludingCategoryIds, ExcludingProductIds) > NumItem
        /// </summary>
        public override bool Evaluate(IEvaluationContext context)
        {
            var result = false;

            if (context is PromotionEvaluationContext promotionEvaluationContext)
            {
                var quantity = promotionEvaluationContext.GetCartItemsOfCategoryQuantity(CategoryId, ExcludingCategoryIds.ToArray(), ExcludingProductIds.ToArray());
                result = UseCompareCondition(quantity, NumItem, NumItemSecond);
            }

            return(result);
        }