自定义集合类,并扩展带表达式树参数的查询方法

最近在补习有关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);
}

猜你喜欢

转载自www.cnblogs.com/zhchsh/p/9259680.html