C# 3.0通过Linq、Lambda、匿名函数、代理函数实现数据查询

本文通过Linq、Lambda、匿名函数及代理函数四种方式查询年龄大于5岁的人员信息,并对比了不同方法的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    这几天,正在学习Linq、Lambda,做了些实验,通过Linq、Lambda、匿名函数、代理函数4种方式实现一个简单的查询,把实现结果记录一下,以免忘记。
      这段代码中有一个Person类,包含Name和Age两个属性。
      还有一个PersonHelper类(这个类规划不是很合理,只是做实验用下),包含一个强类型的List<Person>,并提供了4种实现数据查询的方法(都是查询年龄大于5的人员信息,并返回):

//方法1:通过Linq返回大于某个年龄段的人
public IEnumerable<Person> GetPersonByLinq(int age)

//方法2:通过Lambda表达式返回大于某个年龄段的人
public IEnumerable<Person> GetPersonByLambda(int age)

//方法3:通过匿名函数返回大于某个年龄段的人
public IEnumerable<Person> GetPersonByAnonymouseMethod(int age)

//方法4:通过代理函数返回大于某个年龄段的人(由于代理函数传递年龄参数不方便,代理函数是通过外部函数完成的)
public IEnumerable<Person> GetPersonBydelegate(Func<Person,bool> func)

下面是完整的代码(VSTS 2008,基于 .Net 3.0 的控制台工程)
1using System;
  2using System.Collections.Generic;
  3using System.Linq;
  4using System.Text;
  5
  6namespace LinqTest
  7{
  8    class Program
  9    {
 10        static void Main(string[] args)
 11        {
 12
 13            PersonHelper helper = new PersonHelper();
 14
 15            //初始化Person类(0-6岁),并把结果放入list列表
 16            for (int i = 0; i < 7; i++)
 17            {
 18                Person p = new Person() 
 19                { Name = string.Format("Jiessieliang{0}", i.ToString()), Age = i };
 20
 21                helper.List.Add(p);
 22            }
 23
 24            //方法1:通过Linq返回岁数大于5的人员集合
 25            IEnumerable<Person> results = helper.GetPersonByLinq(5);
 26            Print(results);
 27
 28
 29            //方法2:通过Lambda表达式返回岁数大于5的人员集合
 30            IEnumerable<Person> results1 = helper.GetPersonByLambda(5);
 31            Print(results1);
 32
 33
 34
 35            //方法3:通过匿名方法返回岁数大于5的人员集合
 36            IEnumerable<Person> results2 = helper.GetPersonByAnonymouseMethod (5);
 37            Print(results2);
 38
 39
 40            //方法4:通过代理函数返回岁数大于5的人员集合
 41
 42            //定义一个代理【protected static bool getByAge(Person person)】
 43            Func<Person, bool> func = new Func<Person, bool>(getByAge);
 44
 45            //通过代理函数返回岁数大于5的人员集合
 46            IEnumerable<Person> results3 = helper.GetPersonBydelegate(func);
 47            Print(results3);
 48
 49
 50            Console.Read();
 51        }
 52
 53        /**//// <summary>
 54        /// 方法4中 最终被调用执行的代理函数
 55        /// </summary>
 56        /// <param name="person"></param>
 57        /// <returns></returns>
 58        protected static bool getByAge(Person person)
 59        {
 60            return person.Age > 5;
 61        }
 62
 63        /**//// <summary>
 64        /// 打印信息到屏幕
 65        /// </summary>
 66        /// <param name="results"></param>
 67        static void  Print(IEnumerable<Person> results)
 68        {
 69
 70            foreach (Person person in results)
 71            {
 72                Console.WriteLine(string.Format("Name is : {0} , Age is : {1}", person.Name, person.Age));
 73            }
 74        }  
 75    }
 76
 77    /**//// <summary>
 78    /// Person类
 79    /// </summary>
 80    public class Person
 81    {
 82        public Person()
 83        { }
 84        private string _name;
 85
 86        public string Name
 87        {
 88            get { return _name; }
 89            set { _name = value; }
 90        }
 91        private int _age;
 92
 93        public int Age
 94        {
 95            get { return _age; }
 96            set { _age = value; }
 97        }
 98
 99    }
100
101    /**//// <summary>
102    /// PersonHelper类
103    /// </summary>
104    public class PersonHelper
105    {
106        /**//// <summary>
107        /// 存放Person的列表
108        /// </summary>
109        List<Person> _list;
110
111        public List<Person> List
112        {
113            get { return _list; }
114          
115        }
116
117        public PersonHelper()
118        {
119            _list = new List<Person>();
120          
121        }
122
123        /**//// <summary>
124        /// 方法1:通过Linq返回结果
125        /// </summary>
126        /// <param name="age"></param>
127        /// <returns></returns>
128        public IEnumerable<Person> GetPersonByLinq(int age)
129        {
130            return from ps in List
131                   where ps.Age > age
132                   select ps;
133        }
134
135        /**//// <summary>
136        /// 方法2:通过Lambda返回结果
137        /// </summary>
138        /// <param name="age"></param>
139        /// <returns></returns>
140        public IEnumerable<Person> GetPersonByLambda(int age)
141        {
142            return Enumerable.Where<Person>(List, ps => (ps.Age > age));
143        }
144
145        /**//// <summary>
146        /// 方法3:通过匿名方法返回结果
147        /// </summary>
148        /// <param name="age"></param>
149        /// <returns></returns>
150        public IEnumerable<Person> GetPersonByAnonymouseMethod(int age)
151        {
152
153            return Enumerable.Where<Person>(List, 
154                delegate(Person ps) { return ps.Age > age; });
155        }
156
157        /**//// <summary>
158        /// 方法4:通过代理函数返回结果
159        /// </summary>
160        /// <param name="func"></param>
161        /// <returns></returns>
162        public IEnumerable<Person> GetPersonBydelegate(Func<Person,bool> func)
163        {
164            return Enumerable.Where<Person>(List, func);
165        }
166    }
167}


最终输出结果为:
Name is : Jiessieliang6 , Age is : 6
Name is : Jiessieliang6 , Age is : 6
Name is : Jiessieliang6 , Age is : 6
Name is : Jiessieliang6 , Age is : 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值