zoukankan      html  css  js  c++  java
  • 自定义集合类,并扩展带表达式树参数的查询方法

    最近在补习有关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);
    }
  • 相关阅读:
    如何使用jetty
    windows安装TortoiseGit详细使用教程【基础篇】
    shiro实现APP、web统一登录认证和权限管理
    Eclipse上安装GIT插件EGit及使用
    RPC之——HTTP协议栈
    Spring Boot构建RESTful API与单元测试
    Spring 之注解事务 @Transactional
    浅析Java中的final关键字
    String中intern的方法
    MySQL索引的查看创建和删除
  • 原文地址:https://www.cnblogs.com/zhchsh/p/9259680.html
Copyright © 2011-2022 走看看