コード例 #1
0
        protected string GetSourceVarName(MemberExpression expression)
        {
            string sourceVarName = null;

            if (expression.Expression is QuerySourceReferenceExpression)
            {
                var        querySource = expression.Expression as QuerySourceReferenceExpression;
                Expression mappedExpression;
                if (QueryBuilder.TryGetQuerySourceMapping(querySource.ReferencedQuerySource, out mappedExpression) &&
                    mappedExpression is SelectVariableNameExpression)
                {
                    sourceVarName = (mappedExpression as SelectVariableNameExpression).Name;
                }
                else
                {
                    sourceVarName = querySource.ReferencedQuerySource.ItemName;
                    QueryBuilder.AddQuerySourceMapping(
                        querySource.ReferencedQuerySource,
                        new SelectVariableNameExpression(querySource.ReferencedQuerySource.ItemName, VariableBindingType.Resource, querySource.ReferencedQuerySource.ItemType));
                }
            }
            else if (expression.Expression is MemberExpression)
            {
                var memberExpression = VisitExpression(expression.Expression);
                if (memberExpression is SelectVariableNameExpression)
                {
                    sourceVarName = (memberExpression as SelectVariableNameExpression).Name;
                }
            }
            return(sourceVarName);
        }