来源:http://www.ibeifeng.com/tech.php?id=46523
用代码实现筛选
QueryExtender控件通过使用RangeExpression和SearchExpression使得定义筛选逻辑变得很容易。同样,可以使用CustomExpression或者MethodExpression控件去通过代码的方式去实现筛选逻辑。实际上,当需要应用筛选逻辑时,CustomExpression会触发一个事件,你可以在这个事件里编写相关的处理代码。而MethodExpression则有点不同,你要编写一个静态的方法,并传入一个类型为IQueryable的对象并且返回的对象也是要相同的类型。传入该方法的对象实际上是在筛选逻辑前的一个查询实例,可以在其中编写你需要实现的查询条件,最后要返回这个查询实例。
下面我们更详细去了解下MethodExpression。假设你要根据登陆了的用户的身份去筛选数据,比如管理员能看到所有产品信息但非管理员只能看到没打折的产品。则我们如上所述在静态方法中,传入IQueryable实例作为参数,返回的也对象类型也必须是IQueryable类型的,如下:
// C#
public static IQueryable FilterBasedOnUser(IQueryable query)
{
if (Roles.IsUserInRole("Administrators"))
// Return the querywithout filtering
return query;
else
// Return only non-discontinued products
return query.Where(p => p.Discontinued == false);
}