目前,ASP.NET动态数据实体仅支持对开箱即用的布尔或外键关系进行过滤
我如何实现自定义过滤器,基于值的下拉列表来过滤行?
答案 0 :(得分:0)
我已经做了类似的事情,只需在GridView数据源中添加where参数。假设您的用户从下拉列表中选择Color Code 9.在Page Init上,设置参数。
Parameter p = new Parameter { Name = "ColorSelection", Type = TypeCode.Int32, DefaultValue = "9" };
GridDataSource.WhereParameters.Add(p);
GridDataSource.Where = "ColorId == @ColorSelection";
答案 1 :(得分:0)
我想出了一种方法,以便它适合ASP.NET动态数据使用的预期模板系统
基本上这个问题是我们在编译时不知道可能被过滤的底层列是什么,更不用说它是什么类型或列名 - 第一条线索导致我实现了一个解决方案是Filter控件都有一个方法GetQueryable
不幸的是,此方法适用于IQueryable
而不是IQueryable<T>
的实例,从而阻止我们只使用标准LINQ运算符。我们需要的是一种动态创建谓词的方法(或者甚至是谓词链 - 在这种情况下,我想做的就是获取不同的条目并对它们进行排序),然后我们可以将其应用于{{1} }
不幸的是,动态LINQ没有开箱即用的实现,因此我们必须使用表达式树 - 如何解决这个问题的第二个提示是IQueryable
对象暴露了.Expressions集合的事实
我们需要做的是创建表达式树来表示谓词(在这种情况下选择distinct)然后将其附加到IQueryable
并返回它。这当然不是一个明显的,也不是直截了当的任务,我当然没有找到容易理解的表达树,但其中我是如何解决这个问题的。