//[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 });
        }
Пример #5
0
        private static ExpressionSerializer CreateSerializer(IEnumerable <Type> knownTypes = null)
        {
            if (knownTypes == null || !knownTypes.Any())
            {
                return(new ExpressionSerializer());
            }
            var assemblies = new List <Assembly> {
                typeof(ExpressionType).Assembly, typeof(IQueryable).Assembly
            };

            knownTypes.ToList().ForEach(type => assemblies.Add(type.Assembly));
            var resolver           = new TypeResolver(assemblies, knownTypes);
            var knownTypeConverter = new KnownTypeExpressionXmlConverter(resolver);
            var serializer         = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { knownTypeConverter });

            return(serializer);
        }
Пример #6
0
        /// <summary>
        /// Hey friends! If anyone is looking at this, they are probably wondering wat da eff is going on. This is a custom serializer for
        /// expressions. I wish I was smart enough to build this, but about the extent of my skill set has me copying the code and debugging
        /// through this bad bitch to try and figure out everything it needs. Since a lot of the xml deserialization relies on runtime reflection
        /// of known types, you need to make damn sure every type which is going to be serialized/deserialized is loaded up into this mofo.
        /// Otherwise, you get to be like me and step through the source code trying to reverse engineer something built by people smarter than you.
        /// </summary>
        /// <returns></returns>
        public static ExpressionSerializer CreateSerializer()
        {
            var assemblies = new Assembly[] { typeof(ValidationRules).Assembly, typeof(ExpressionType).Assembly };
            var resolver   = new TypeResolver(assemblies, new Type[]
            {
                typeof(ValidationRules), typeof(ComparableType), typeof(ValidationMessage), typeof(ReportBase), typeof(SurfReport),
                typeof(SnowReport), typeof(Ratings)//note: adding a nullable operator to a custom enum has the compiler inline a new type for you (I think), which doesn't seem to be accessible conventionally from the compile time known types and assemblies. fun fact!
            });
            //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 });
            ExpressionSerializer serializer = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { knowntypeconverter });

            return(serializer);
            //ExpressionSerializer serializer = new ExpressionSerializer()
        }
Пример #7
0
        public void KnownTypeExpressionXmlConverterTest()
        {
            CustomExpressionXmlConverter knconverter = new KnownTypeExpressionXmlConverter(this.resolver);
            XElement           x;
            ConstantExpression cx;
            Expression         e;
            List <int>         intlist = new List <int> {
                0, 1, 3, 4, 5
            };

            cx = Expression.Constant(intlist);
            knconverter.TrySerialize(cx, out x);
            knconverter.TryDeserialize(x, out e);
            Assert.IsTrue(((ConstantExpression)e).Value is List <int>);
            Assert.IsTrue(((List <int>)((ConstantExpression)e).Value).SequenceEqual(intlist));

            Customer c = Hans;

            cx = Expression.Constant(c);
            knconverter.TrySerialize(cx, out x);
            knconverter.TryDeserialize(x, out e);
            Assert.IsTrue(((ConstantExpression)e).Value is Customer);
        }