//[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); }
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 }); }
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(); }