private static ObjectParameterCollection MergeParameters(
            ObjectParameterCollection query1Params,
            ObjectParameterCollection query2Params)
        {
            if (query1Params == null && query2Params == null)
            {
                return((ObjectParameterCollection)null);
            }
            ObjectParameterCollection parameterCollection1;
            ObjectParameterCollection parameterCollection2;

            if (query1Params != null)
            {
                parameterCollection1 = ObjectParameterCollection.DeepCopy(query1Params);
                parameterCollection2 = query2Params;
            }
            else
            {
                parameterCollection1 = ObjectParameterCollection.DeepCopy(query2Params);
                parameterCollection2 = query1Params;
            }
            if (parameterCollection2 != null)
            {
                foreach (ObjectParameter objectParameter in parameterCollection2)
                {
                    parameterCollection1.Add(objectParameter.ShallowCopy());
                }
            }
            return(parameterCollection1);
        }
예제 #2
0
        /// <summary>
        /// Merges <see cref="ObjectParameter"/>s from two ObjectQuery arguments to SetOp builder methods (Except, Intersect, Union, UnionAll).
        /// A new <see cref="ObjectParameterCollection"/> is returned that contains copies of parameters from both <paramref name="query1Params"/> and <paramref name="query2Params"/>.
        /// </summary>
        /// <param name="query1Params">ObjectParameters from the first ObjectQuery argument (on which the query builder method was called)</param>
        /// <param name="query2Params">ObjectParameters from the second ObjectQuery argument (specified as an argument to the builder method)</param>
        /// <returns>A new ObjectParameterCollection containing copies of all parameters</returns>
        private static ObjectParameterCollection MergeParameters(ObjectParameterCollection query1Params, ObjectParameterCollection query2Params)
        {
            if (query1Params == null && query2Params == null)
            {
                return(null);
            }

            ObjectParameterCollection mergedParams;
            ObjectParameterCollection sourceParams;

            if (query1Params != null)
            {
                mergedParams = ObjectParameterCollection.DeepCopy(query1Params);
                sourceParams = query2Params;
            }
            else
            {
                mergedParams = ObjectParameterCollection.DeepCopy(query2Params);
                sourceParams = query1Params;
            }

            if (sourceParams != null)
            {
                foreach (ObjectParameter sourceParam in sourceParams)
                {
                    mergedParams.Add(sourceParam.ShallowCopy());
                }
            }

            return(mergedParams);
        }
예제 #3
0
        internal static ObjectQueryState OfType(ObjectQueryState query, EdmType newType, Type clrOfType)
        {
            Debug.Assert(newType != null, "OfType cannot be null");
            Debug.Assert(Helper.IsEntityType(newType) || Helper.IsComplexType(newType), "OfType must be Entity or Complex type");

            string queryText = GetCommandText(query);

            // Build the new query string - "OFTYPE((<query>), [<type namespace>].[<type name>])"
            int queryLength = _ofTypeProlog.Length +
                              queryText.Length +
                              _ofTypeInfix.Length +
                              newType.NamespaceName.Length +
                              (newType.NamespaceName != string.Empty ? _ofTypeInfix2.Length : 0) +
                              newType.Name.Length +
                              _ofTypeEpilog.Length;

            StringBuilder builder = new StringBuilder(queryLength);

            builder.Append(_ofTypeProlog);
            builder.Append(queryText);
            builder.Append(_ofTypeInfix);
            if (newType.NamespaceName != string.Empty)
            {
                builder.Append(newType.NamespaceName);
                builder.Append(_ofTypeInfix2);
            }
            builder.Append(newType.Name);
            builder.Append(_ofTypeEpilog);

            // Create a new EntitySqlQueryImplementation that uses the new query as its command text.
            // Span is carried over, no adjustment is needed
            return(NewBuilderQuery(query, clrOfType, builder, query.Span, ObjectParameterCollection.DeepCopy(query.Parameters)));
        }
예제 #4
0
        internal static ObjectQueryState Distinct(ObjectQueryState query)
        {
            // Build the new query string - "SET(<this query>)"
            string        queryText = GetCommandText(query);
            StringBuilder builder   = new StringBuilder(_distinctProlog.Length + queryText.Length + _distinctEpilog.Length);

            builder.Append(_distinctProlog);
            builder.Append(queryText);
            builder.Append(_distinctEpilog);

            // Span is carried over, no adjustment is needed

            return(NewBuilderQuery(query, query.ElementType, builder, query.Span, ObjectParameterCollection.DeepCopy(query.Parameters)));
        }
        private static ObjectParameterCollection MergeParameters(
            ObjectContext context,
            ObjectParameterCollection sourceQueryParams,
            ObjectParameter[] builderMethodParams)
        {
            if (sourceQueryParams == null && builderMethodParams.Length == 0)
            {
                return((ObjectParameterCollection)null);
            }
            ObjectParameterCollection parameterCollection = ObjectParameterCollection.DeepCopy(sourceQueryParams) ?? new ObjectParameterCollection(context.Perspective);

            foreach (ObjectParameter builderMethodParam in builderMethodParams)
            {
                parameterCollection.Add(builderMethodParam);
            }
            return(parameterCollection);
        }
예제 #6
0
        /// <summary>
        /// Merges <see cref="ObjectParameter"/>s from a source ObjectQuery with ObjectParameters specified as an argument to a builder method.
        /// A new <see cref="ObjectParameterCollection"/> is returned that contains copies of parameters from both <paramref name="sourceQueryParams"/> and <paramref name="builderMethodParams"/>.
        /// </summary>
        /// <param name="context">The <see cref="ObjectContext"/> to use when constructing the new parameter collection</param>
        /// <param name="sourceQueryParams">ObjectParameters from the ObjectQuery on which the query builder method was called</param>
        /// <param name="builderMethodParams">ObjectParameters that were specified as an argument to the builder method</param>
        /// <returns>A new ObjectParameterCollection containing copies of all parameters</returns>
        private static ObjectParameterCollection MergeParameters(ObjectContext context, ObjectParameterCollection sourceQueryParams, ObjectParameter[] builderMethodParams)
        {
            Debug.Assert(builderMethodParams != null, "params array argument should not be null");
            if (sourceQueryParams == null && builderMethodParams.Length == 0)
            {
                return(null);
            }

            ObjectParameterCollection mergedParams = ObjectParameterCollection.DeepCopy(sourceQueryParams);

            if (mergedParams == null)
            {
                mergedParams = new ObjectParameterCollection(context.Perspective);
            }

            foreach (ObjectParameter builderParam in builderMethodParams)
            {
                mergedParams.Add(builderParam);
            }

            return(mergedParams);
        }
        // <summary>
        // Merges <see cref="ObjectParameter" />s from a source ObjectQuery with ObjectParameters specified as an argument to a builder method.
        // A new <see cref="ObjectParameterCollection" /> is returned that contains copies of parameters from both
        // <paramref
        //     name="sourceQueryParams" />
        // and <paramref name="builderMethodParams" />.
        // </summary>
        // <param name="context">
        // The <see cref="ObjectContext" /> to use when constructing the new parameter collection
        // </param>
        // <param name="sourceQueryParams"> ObjectParameters from the ObjectQuery on which the query builder method was called </param>
        // <param name="builderMethodParams"> ObjectParameters that were specified as an argument to the builder method </param>
        // <returns> A new ObjectParameterCollection containing copies of all parameters </returns>
        private static ObjectParameterCollection MergeParameters(
            ObjectContext context, ObjectParameterCollection sourceQueryParams, ObjectParameter[] builderMethodParams)
        {
            DebugCheck.NotNull(builderMethodParams);
            if (sourceQueryParams == null &&
                builderMethodParams.Length == 0)
            {
                return(null);
            }

            var mergedParams = ObjectParameterCollection.DeepCopy(sourceQueryParams);

            if (mergedParams == null)
            {
                mergedParams = new ObjectParameterCollection(context.Perspective);
            }

            foreach (var builderParam in builderMethodParams)
            {
                mergedParams.Add(builderParam);
            }

            return(mergedParams);
        }
        internal static ObjectQueryState OfType(
            ObjectQueryState query,
            EdmType newType,
            Type clrOfType)
        {
            string        commandText = EntitySqlQueryBuilder.GetCommandText(query);
            StringBuilder queryText   = new StringBuilder("OFTYPE(\r\n(\r\n".Length + commandText.Length + "\r\n),\r\n[".Length + newType.NamespaceName.Length + (!string.IsNullOrEmpty(newType.NamespaceName) ? "].[".Length : 0) + newType.Name.Length + "]\r\n)".Length);

            queryText.Append("OFTYPE(\r\n(\r\n");
            queryText.Append(commandText);
            queryText.Append("\r\n),\r\n[");
            if (!string.IsNullOrEmpty(newType.NamespaceName))
            {
                queryText.Append(newType.NamespaceName);
                queryText.Append("].[");
            }
            queryText.Append(newType.Name);
            queryText.Append("]\r\n)");
            return(EntitySqlQueryBuilder.NewBuilderQuery(query, clrOfType, queryText, query.Span, (IEnumerable <ObjectParameter>)ObjectParameterCollection.DeepCopy(query.Parameters)));
        }
        internal static ObjectQueryState Distinct(ObjectQueryState query)
        {
            string        commandText = EntitySqlQueryBuilder.GetCommandText(query);
            StringBuilder queryText   = new StringBuilder("SET(\r\n".Length + commandText.Length + "\r\n)".Length);

            queryText.Append("SET(\r\n");
            queryText.Append(commandText);
            queryText.Append("\r\n)");
            return(EntitySqlQueryBuilder.NewBuilderQuery(query, query.ElementType, queryText, query.Span, (IEnumerable <ObjectParameter>)ObjectParameterCollection.DeepCopy(query.Parameters)));
        }