Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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);
        }