//[PagingFilter]
        public virtual IList <T> GetByExpression([FromBody] XElement x, [FromUri] int ps = 10, [FromUri] int pn = 1)
        {
            //TODO:后期回顾整理(重要)
            var creator = new QueryCreator(this.FnGetDatabaseObjects);

            var assemblies = new Assembly[]
            {
                typeof(PhyGeoDisaster).Assembly,
                typeof(ExpressionType).Assembly,
                typeof(IQueryable).Assembly,
                typeof(Enum).Assembly,
                typeof(DateTime).Assembly
            };
            var resolver = new TypeResolver(assemblies, new Type[]
            {
                typeof(PhyGeoDisaster), typeof(Enum), typeof(DateTime)
            });

            CustomExpressionXmlConverter queryconverter     = new QueryExpressionXmlConverter(creator, resolver);
            CustomExpressionXmlConverter knowntypeconverter = new KnownTypeExpressionXmlConverter(resolver);
            var serializer = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { queryconverter, knowntypeconverter });

            Expression           e      = serializer.Deserialize(x);
            MethodCallExpression m      = (MethodCallExpression)e;
            LambdaExpression     lambda = Expression.Lambda(m);
            Delegate             fn     = lambda.Compile();
            dynamic result = fn.DynamicInvoke(new object[0]);
            //dynamic array = Enumerable.ToArray(result);
            var array = Enumerable.ToArray(Enumerable.Cast <T>(result));

            //           IList<PhyGeoDisasterSimplify> phyModels = Mapper.Map<IEnumerable<PhyGeoDisaster>,
            //IList<PhyGeoDisasterSimplify>>(array);
            return(array);
        }
Пример #2
0
        public BaseTests()
        {
            this.assemblies = new Assembly[] { typeof(Customer).Assembly, typeof(BaseTests).Assembly, typeof(ExpressionType).Assembly, typeof(IQueryable).Assembly };
            this.resolver   = new TypeResolver(assemblies, new Type[]
            {
                typeof(Customer), typeof(Order), typeof(Product),
                typeof(Supplier), typeof(Shipper)
            });
            var creator = new QueryCreator(this.FnGetObjects);
            CustomExpressionXmlConverter queryconverter     = new QueryExpressionXmlConverter(creator, this.resolver);
            CustomExpressionXmlConverter knowntypeconverter = new KnownTypeExpressionXmlConverter(this.resolver);

            this.serializer = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { queryconverter, knowntypeconverter });
        }
Пример #3
0
        static ExpressionSerializer CreateSerializer()
        {
            var assemblies = new Assembly[] { typeof(Customer).Assembly, typeof(ExpressionType).Assembly, typeof(IQueryable).Assembly };
            var resolver   = new TypeResolver(assemblies, new Type[]
            {
                typeof(Customer), typeof(Order), typeof(Product),
                typeof(Supplier), typeof(Shipper)
            });
            //var creator = new QueryCreator();
            CustomExpressionXmlConverter queryconverter     = new QueryExpressionXmlConverter(creator: null, resolver: resolver);
            CustomExpressionXmlConverter knowntypeconverter = new KnownTypeExpressionXmlConverter(resolver);
            ExpressionSerializer         serializer         = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { queryconverter, knowntypeconverter });

            return(serializer);
            //ExpressionSerializer serializer = new ExpressionSerializer()
        }
        public NorthwindService()
        {
            var connectionStrings = System.Configuration.ConfigurationManager.ConnectionStrings;

            this.connectionString = connectionStrings["northwind"].ConnectionString;
            this.creator          = new QueryCreator(this.FnGetDatabaseObjects);
            this.assemblies       = new Assembly[] { typeof(Customer).Assembly, typeof(ExpressionType).Assembly, typeof(IQueryable).Assembly };
            this.resolver         = new TypeResolver(assemblies, new Type[]
            {
                typeof(Customer), typeof(Order), typeof(Product),
                typeof(Supplier), typeof(Shipper)
            });
            CustomExpressionXmlConverter queryconverter     = new QueryExpressionXmlConverter(creator, this.resolver);
            CustomExpressionXmlConverter knowntypeconverter = new KnownTypeExpressionXmlConverter(this.resolver);

            this.serializer = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { queryconverter, knowntypeconverter });
        }
        public void QueryExpressionXmlConverterTest()
        {
            Type                 elementType = typeof(Customer);
            var                  creator     = new QueryCreator(this.FnGetObjects);
            var                  converter   = new QueryExpressionXmlConverter(creator, this.resolver);
            bool                 success;
            XElement             x;
            Expression           e;
            MethodCallExpression m;
            ConstantExpression   cx;
            IQueryProvider       provider;

            //the client Query. IQueryProvider has not real data.
            Query <Customer> query = new Query <Customer>(default(IQueryProvider));

            provider = ((IQueryable)query).Provider;
            IQueryable <Customer> queryable;

            queryable = from c in query
                        where c.ID == null                         //initialized with properties == null
                        select c;

            //serialize to XML
            e       = Expression.Constant(queryable);
            success = converter.TrySerialize(e, out x);

            //deserialize to ConstantExpression(Query)
            success = converter.TryDeserialize(x, out e);
            cx      = (ConstantExpression)e;
            Query <Customer> serverquery = (Query <Customer>)cx.Value;

            //upon deserialization, should have a new IQueryProvider
            Assert.AreNotEqual(provider, ((IQueryable)serverquery).Provider);
            provider = ((IQueryable)serverquery).Provider;

            //Execute Query on server side.
            int count = serverquery.Count();
        }