コード例 #1
0
ファイル: IndexVisitor.cs プロジェクト: zuhuizou/DotNetDAL
        public override void VisitQueryBody(QueryBodySyntax node)
        {
            if ((node.SelectOrGroup is SelectClauseSyntax) == false)
            {
                VisitGroupClause(node.SelectOrGroup as GroupClauseSyntax);
                return;
            }

            var selectExpressions = new Dictionary <string, ExpressionSyntax>();
            var visitor           = new CaptureSelectExpressionsAndNewFieldNamesVisitor(false, new HashSet <string>(), selectExpressions);

            node.Accept(visitor);

            _indexData.SelectExpressions = selectExpressions;
            _indexData.NumberOfSelectClauses++;
        }
コード例 #2
0
ファイル: IndexVisitor.cs プロジェクト: zuhuizou/DotNetDAL
        public override void VisitInvocationExpression(InvocationExpressionSyntax invocationExpression)
        {
            base.VisitInvocationExpression(invocationExpression);

            var selectExpressions = new Dictionary <string, ExpressionSyntax>();
            var visitor           = new CaptureSelectExpressionsAndNewFieldNamesVisitor(false, new HashSet <string>(), selectExpressions);

            invocationExpression.Accept(visitor);

            var memberAccessExpression = invocationExpression.Expression as MemberAccessExpressionSyntax;

            if (memberAccessExpression == null)
            {
                base.VisitInvocationExpression(invocationExpression);
                return;
            }

            if (memberAccessExpression.Name.Identifier.ValueText == "Where")
            {
                _indexData.HasWhere = true;
            }

            _indexData.SelectExpressions    = selectExpressions;
            _indexData.InvocationExpression = invocationExpression;
            _indexData.FromIdentifier       = (invocationExpression.ArgumentList.Arguments[0].Expression as SimpleLambdaExpressionSyntax)?.Parameter.Identifier.ValueText;

            if (memberAccessExpression.Expression is IdentifierNameSyntax identifierNameSyntax)
            {
                _indexData.Collection = identifierNameSyntax.Identifier.ValueText;
                return;
            }

            if (memberAccessExpression.Expression is MemberAccessExpressionSyntax innerMemberAccessExpression)
            {
                _indexData.Collection = innerMemberAccessExpression.Name.Identifier.ValueText;
            }
        }