使用ASP筛选表中的行.NET动态数据实体



目前,ASP。NET动态数据实体仅支持对布尔值或外键关系进行过滤

我如何实现一个自定义过滤器,基于值的下拉列表来过滤行?

我已经做了一些类似的使用只是添加参数到GridView的数据源。假设您的用户从下拉菜单中选择了Color Code 9。在Page_Init上设置参数

Parameter p = new Parameter { Name = "ColorSelection", Type = TypeCode.Int32, DefaultValue = "9" };
GridDataSource.WhereParameters.Add(p);
GridDataSource.Where = "ColorId == @ColorSelection";

我想出了一种方法来做到这一点,使它适合预期的模板系统,ASP。. NET动态数据使用

基本上,这个问题是我们在编译时不知道可能被过滤的底层列是什么,更不用说它是什么类型或列名了-引导我实现解决方案的第一个线索是过滤器控件都有一个方法GetQueryable

不幸的是,该方法适用于IQueryable而不是IQueryable<T>的实例,因此我们无法简单地使用标准LINQ操作符。我们需要的是一种动态创建谓词(甚至谓词链)的方法-然而,在这种情况下,我想做的只是获得不同的条目并对它们进行排序),然后我们可以将其应用于IQueryable

不幸的是,动态LINQ没有现成的实现,因此我们必须使用表达式树——如何解决这个问题的第二个提示是IQueryable对象公开了一个。expressions集合

我们需要做的是创建表达式树来表示谓词(在本例中用于选择distinct),然后将其附加到IQueryable并返回它。这当然不是一个明显的,也不是直截了当的任务,我当然也没有发现表达式树容易理解,但这就是我解决问题的方法。

相关内容

  • 没有找到相关文章

最新更新