示例#1
0
        private static IQueryable SourceCore(
            this ApiContext context,
            string namespaceName,
            string name,
            object[] arguments)
        {
            var elementType = context.EnsureElementType(namespaceName, name);
            var method      = SourceCoreMethod.MakeGenericMethod(elementType);
            var args        = new object[] { namespaceName, name, arguments };

            return(method.Invoke(null, args) as IQueryable);
        }
示例#2
0
        /// <summary>
        /// Gets a queryable source of data using an API context.
        /// </summary>
        /// <typeparam name="TElement">
        /// The type of the elements in the queryable source.
        /// </typeparam>
        /// <param name="context">
        /// An API context.
        /// </param>
        /// <param name="name">
        /// The name of an entity set, singleton or composable function import.
        /// </param>
        /// <param name="arguments">
        /// If <paramref name="name"/> is a composable function import,
        /// the arguments to be passed to the composable function import.
        /// </param>
        /// <returns>
        /// A queryable source.
        /// </returns>
        /// <remarks>
        /// <para>
        /// If the name identifies a singleton or a composable function import
        /// whose result is a singleton, the resulting queryable source will
        /// be configured such that it represents exactly zero or one result.
        /// </para>
        /// <para>
        /// Note that the resulting queryable source cannot be synchronously
        /// enumerated, as the API engine only operates asynchronously.
        /// </para>
        /// </remarks>
        public static IQueryable <TElement> GetQueryableSource <TElement>(
            this ApiContext context,
            string name,
            params object[] arguments)
        {
            Ensure.NotNull(context, "context");
            Ensure.NotNull(name, "name");

            var elementType = context.EnsureElementType(null, name);

            if (typeof(TElement) != elementType)
            {
                throw new ArgumentException(Resources.ElementTypeNotMatch);
            }

            return(SourceCore <TElement>(null, name, arguments));
        }