예제 #1
0
        public static ExpressionChain Build(Expression expression)
        {
            var exprChain = new ExpressionChain();

            Build(exprChain, expression);
            if (exprChain.Count > 1)
            {
                exprChain.Reverse();
            }
            if (exprChain.Count == 0)
            {
                exprChain.Add(expression);
            }
            return(exprChain);
        }
예제 #2
0
        private static void Build(ExpressionChain chain, Expression expression)
        {
            if (expression.NodeType != ExpressionType.Call)
            {
                return;
            }
            var callExpr = expression as MethodCallExpression;

            if (callExpr.Object != null || callExpr.Method.DeclaringType != typeof(Queryable))
            {
                return;
            }
            chain.Add(callExpr);
            Build(chain, callExpr.Arguments[0]);
        }