自定义集合类,并扩展带表达式树参数的查询方法
最近在补习有关LINQ的相关知识点,学习过程中有感而发,自定义集合类并实现类似LINQ的表达式树查询方法,
在此简单记录,用于温故知新,小弟才疏学浅,该文技术含量低,高手勿喷。
直接上代码:
1. 自定义集合类
public class MyCollection<T> : IEnumerable<T> { IEnumerable<T> orderList; public MyCollection(IEnumerable<T> list) { orderList = list; } IEnumerator IEnumerable.GetEnumerator() { foreach (var order in orderList) { yield return order; } } IEnumerator<T> IEnumerable<T>.GetEnumerator() { foreach (var order in orderList) { yield return order; } } }
2. 扩展查询方法
public static class CollectionExtention { public static IEnumerable<T> QueryExtention<T>(this MyCollection<T> source, Expression<Func<T, bool>> expression) { foreach (var item in source) { if (expression.Compile()(item)) yield return item; } } }
3. 方法应用
public class Order { public string OrderName { get; set; } public int Price { get; set; } } IList<Order> list = new List<Order>() { new Order{OrderName = "A", Price = 1}, new Order{OrderName = "B", Price = 2}, new Order{OrderName = "C", Price = 3}, new Order{OrderName = "D", Price = 2} }; MyCollection<Order> orders = new MyCollection<Order>(list); IEnumerable<Order> result = orders.QueryExtention<Order>(o => o.Price == 2); foreach(var item in result) { Console.WriteLine("OrderName:" + item.OrderName + ";Price:" + item.Price); }