public void GetQuery_Context() { MetaModel m = Utils.GetModel <MyDataContext2> (); var req = new FakeHttpWorkerRequest(); var ctx = new HttpContext(req); HttpContext.Current = ctx; RouteCollection routes = RouteTable.Routes; routes.Clear(); var route = new MyDynamicDataRoute("{table}/{action}.aspx") { Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), Model = m, RouteHandler = new MyDynamicDataRouteHandler() }; routes.Add(route); MetaTable t = m.GetTable("FooTable");; IQueryable query = t.GetQuery(null); Assert.IsNotNull(query, "#A1"); Assert.IsTrue(query.GetType() == typeof(Table <Foo>), "#A2"); var foo = new Foo(true); AssertExtensions.Throws(() => t.GetQuery(foo), "#B1"); }
public static void FillListItemCollection(System.Web.DynamicData.MetaTable table, ListItemCollection listItemCollection) { Func <object, object> func2 = null; IQueryable query = table.GetQuery(); IEnumerable enumerable = null; MetaColumn sortColumn = table.SortColumn; if (sortColumn == null) { enumerable = query; } else if (sortColumn.IsCustomProperty) { IEnumerable <object> source = query.Cast <object>().AsEnumerable <object>(); if (func2 == null) { func2 = delegate(object row) { return(DataBinder.GetPropertyValue(row, sortColumn.Name)); }; } Func <object, object> keySelector = func2; if (table.SortDescending) { enumerable = source.OrderByDescending <object, object>(keySelector); } else { enumerable = source.OrderBy <object, object>(keySelector); } } else { ParameterExpression expression = Expression.Parameter(table.EntityType, "row"); LambdaExpression expression2 = null; if (sortColumn is MetaForeignKeyColumn) { MetaColumn column = (sortColumn as MetaForeignKeyColumn).ParentTable.SortColumn; expression2 = Expression.Lambda(Expression.Property(Expression.Property(expression, sortColumn.Name), column.Name), new ParameterExpression[] { expression }); } else { expression2 = Expression.Lambda(Expression.Property(expression, sortColumn.Name), new ParameterExpression[] { expression }); } string methodName = table.SortDescending ? "OrderByDescending" : "OrderBy"; MethodCallExpression expression3 = Expression.Call(typeof(Queryable), methodName, new Type[] { query.ElementType, expression2.Body.Type }, new Expression[] { query.Expression, expression2 }); enumerable = query.Provider.CreateQuery(expression3); } foreach (object obj2 in enumerable) { string displayString = table.GetDisplayString(obj2); string primaryKeyString = table.GetPrimaryKeyString(obj2); listItemCollection.Add(new ListItem(displayString, primaryKeyString.TrimEnd(new char[0]))); } }
private static IQueryable BuildFilterQuery(MetaTable table, string prefixText, int maxCount) { IQueryable query = table.GetQuery(); // row var entityParam = Expression.Parameter(table.EntityType, "row"); // row.DisplayName var property = Expression.Property(entityParam, table.DisplayColumn.Name); // "prefix" var constant = Expression.Constant(prefixText); // row.DisplayName.StartsWith("prefix") var startsWithCall = Expression.Call(property, typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) }), constant); // row => row.DisplayName.StartsWith("prefix") var whereLambda = Expression.Lambda(startsWithCall, entityParam); // Customers.Where(row => row.DisplayName.StartsWith("prefix")) var whereCall = Expression.Call(typeof(Queryable), "Where", new Type[] { table.EntityType }, query.Expression, whereLambda); // Customers.Where(row => row.DisplayName.StartsWith("prefix")).Take(20) var takeCall = Expression.Call(typeof(Queryable), "Take", new Type[] { table.EntityType }, whereCall, Expression.Constant(maxCount)); return query.Provider.CreateQuery(takeCall); }