示例#1
0
        object ThenInclude(TypeDescriptor typeDescriptor, object lastQuery, TypeDescriptor declaringTypeDescriptor, Func <object, object> queryBuilder)
        {
            int navCount = typeDescriptor.NavigationPropertyDescriptors.Count;

            for (int i = 0; i < typeDescriptor.NavigationPropertyDescriptors.Count; i++)
            {
                //entity.TOther
                PropertyDescriptor propertyDescriptor = typeDescriptor.NavigationPropertyDescriptors[i];
                TypeDescriptor     navTypeDescriptor  = propertyDescriptor.GetPropertyTypeDescriptor();
                if (declaringTypeDescriptor != null && navTypeDescriptor == declaringTypeDescriptor)
                {
                    continue;
                }

                Func <object, object> includableQueryBuilder = query =>
                {
                    return(this.CallThenIncludeMethod(queryBuilder(query), propertyDescriptor));
                };

                lastQuery = this.ThenInclude(navTypeDescriptor, this.CallThenIncludeMethod(lastQuery, propertyDescriptor), typeDescriptor, includableQueryBuilder);

                if (i < navCount - 1)
                {
                    lastQuery = queryBuilder(lastQuery);
                }
            }

            return(lastQuery);
        }
示例#2
0
        object Include(TypeDescriptor typeDescriptor, object lastQuery, PropertyDescriptor propertyDescriptor)
        {
            //entity.TOther or entity.List
            TypeDescriptor navTypeDescriptor = propertyDescriptor.GetPropertyTypeDescriptor();

            Func <object, object> queryBuilder = query =>
            {
                return(this.CallIncludeMethod(query, propertyDescriptor));
            };

            lastQuery = this.ThenInclude(navTypeDescriptor, queryBuilder(lastQuery), typeDescriptor, queryBuilder);

            return(lastQuery);
        }