1.数据量不大的时候取出数据缓存于服务器,然后排序,筛选等基于缓存进行以提高效率。
排序或筛选的方法是使用集合类型提供的,如List<T>.sort() List<T>.Findall()
2.筛选方法: List<T>.FindAll(Predicate<T> match)
讲解:Predicate<T>封装筛选的规则,它的位置是在参数类型上,能个定义成这样的类型的必然是委托。
它的定义:public delegate bool Predicate<T>(T obj)
使用举例:假设现有集合 list<order>,T即order,那么你的筛选方法的参数就是order类型变量。
筛选方法的可能原型就是: public bool MatchRule(order item);
筛选就意味着有外部条件,对order来说,年 月 日 国家 供应商等等都是。 那如何将筛选方法和条件进行整合呢?
定义一个类。构造函数中的参数就是这些条件。然 后用order中的属性来和参数进行比较。
书的作者把此类定义为泛型类,MatchRule定义为泛型方法,此泛型类要求类型实现一个接口,接口中有一属性Date,
类型为datetime,目的是在泛型MatchRule方法中可以写如下代码:
public bool MatchRule(T item) { if (year!=0 && year!=item.Date.Year) return false; }
3.排序:使用list<T>.sort方法。要求T实现IComparable<T>接口来提供默认排序。
此处举例:Order来实现这个接口。
public int CompareTo(order other) { //说明:其实类实现这个接口 把比较交给了属性客户ID,也就是string类型的比较 // 基础类型几乎都实现了IComparable接口,直接调用它们类型的比较即可 return this.CustomerId.CompareTo(other.CustomerId) }
高级排序:
多个列组合及升序降序等要求。建议实现ICompare<T>接口。传递两个同类型对象及比较规则来排序。例子可以参考msdn。