public static IQueryable <T> ApplyOrderBy <T>(this IQueryable <T> source, string propertyName, string orderType = "asc") { var expression = PropertyAccesor <T> .Get(propertyName); if (expression == null) { return(source); } //Ordenar ascendentemente por defecto var type = nameof(Queryable.OrderBy); //Ordenar descendentemente si es otro valor if (!string.IsNullOrEmpty(orderType) && orderType == "desc") { type = nameof(Queryable.OrderByDescending); } MethodCallExpression resultExpression = Expression.Call( typeof(Queryable), type, new Type[] { typeof(T), expression.ReturnType }, source.Expression, Expression.Quote(expression)); return(source.Provider.CreateQuery <T>(resultExpression)); }
public static IQueryable <T> ApplyWhere <T>(this IQueryable <T> source, string propertyName, object propertyValue) { var mba = PropertyAccesor <T> .Get(propertyName); if (mba == null) { return(source); } object value; try { value = Convert.ChangeType(propertyValue, mba.ReturnType); } catch (Exception ex) { return(source); } var eqe = Expression.Equal( mba.Body, Expression.Constant(value, mba.ReturnType)); var expression = Expression.Lambda(eqe, mba.Parameters[0]); MethodCallExpression resultExpression = Expression.Call( null, GetMethodInfo(Queryable.Where, source, (Expression <Func <T, bool> >)null), new Expression[] { source.Expression, Expression.Quote(expression) }); return(source.Provider.CreateQuery <T>(resultExpression)); }
private void GrabObjects() { if (toolBar != null) { return; } FieldAccesor toolBarAccesor = new FieldAccesor(propertyGrid, "toolBar"); if (toolBarAccesor.IsValid) { toolBarAccesor.Get(); } else { toolBarAccesor = new FieldAccesor(propertyGrid, "toolStrip"); toolBarAccesor.Get(); // for a toolstrip we have to "fix" the readonly stuff on the controls :( Control strip = toolBarAccesor.Value as Control; FieldAccesor readonlyFlag = new FieldAccesor(strip.Controls, "_isReadOnly"); readonlyFlag.Set(false); } toolBar = toolBarAccesor.Value as Control; AttachNewToolButtons(); FieldAccesor gridViewAccesor = new FieldAccesor(propertyGrid, "gridView"); gridViewAccesor.Get(); this.gridView = gridViewAccesor.Value; allGridItemsAC = new FieldAccesor(gridView, "allGridEntries"); topLevelGridItemsAC = new FieldAccesor(gridView, "topLevelGridEntries"); totalProps = new FieldAccesor(gridView, "totalProps"); selectedRow = new FieldAccesor(gridView, "selectedRow"); setScrollOffset = new MethodAccesor(gridView.GetType(), "SetScrollOffset"); selectGridEntry = new PropertyAccesor(gridView, "SelectedGridEntry"); layoutWindow = new MethodAccesor(gridView.GetType(), "Refresh"); propertyGrid.SelectedObjectsChanged += new EventHandler(propertyGrid_SelectedObjectsChanged); propertyGrid.PropertyTabChanged += new PropertyTabChangedEventHandler(propertyGrid_PropertyTabChanged); propertyGrid.PropertySortChanged += new EventHandler(propertyGrid_PropertySortChanged); }