你可以考虑某种过滤器的基类:
public class BaseFilter
{
public string Property { get; set; }
public FilterType Type { get; set; }
public Object[] Arguments { get; set; }
public Expression<T> GenerateExpression()
{
....
}
}
写作
GenerateExpression()
功能可以很好的锻炼:)
你可以储存
List<BaseFilter>
当前用户的会话中。其他功能将具有其他会话密钥。当您要应用筛选器时,您将调用:
var items = Repository.GetAll();
var filters = Session["key"] as List<BaseFilter>;//Session wrapper usage recommended here
foreach(var filter in filters)
{
items = items.Where(filter.GenerateExpression());
}
如果不想存储其他参数,可以创建其他类并将其存储在会话中,而不是
列表<基本筛选器>
:
public class ListState
{
public int Page { get; set; }
public List<BaseFilter> AppliedFilters { get; set; }
public string Order { get; set; }
}