C#中LINQ技术的简单小例

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
 
namespace LINQ技术  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //LINQ中的Where扩展方法,要想使用,必须导入using System.Linq;   
            //下面我们看一下这个方法的声明   
            //public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source,Func<TSource, bool> predicate )   
            //返回类型是:IEnumerable<TSource>   
            //第一参数this IEnumerable<TSource> source代表的是他要扩展的类型,也就是说在IEnumerable<TSource>可以直接调用where方法   
            //Func<TSource, bool> predicate第二个参数是一个委托,下面我们看一下他的声明   
            //public delegate TResult Func<T, TResult>( T arg ) 封装一个带有T类型,返回Tresult类型的方法   
            //下面我们使用Linq中的Where方法来检索我们的列表   
            //我们做一个List<T>的列表,其中存放Person对象,然后我们用where方法检索出年纪在20-30之前的人员 。   
            List<Person> lists = new List<Person>()  ;  
 
            lists.Add( new Person( "aladdin" , 30 ) ) ;  
            lists.Add( new Person( "jacky" , 20 ) ) ;  
            lists.Add( new Person( "zhao" , 11 ) ) ;  
            lists.Add( new Person( "fuck" , 33 ) ) ;  
            lists.Add( new Person( "emep" , 25 ) ) ;  
 
            IEnumerable<Person> reList = lists.Where<Person>( param => param.age >= 20 && param.age<= 30 ) ;  
 
            foreach( Person per in reList )  
            {  
                Console.WriteLine( per.name +  "  " + per.age ) ;  
            }  
            //结果 aladdin jacky   
 
            //其实Linq一般的查询,是可以直接写where select 等语句来实现,系统编译时,会自动将他转化成扩展方法的调用   
            var query = from r in lists where r.age >= 20 && r.age <= 30 select r;  
 
            foreach( Person per in query )  
            {  
                Console.WriteLine( per.name +  "  " + per.age ) ;  
            }  
 
            //linq语句必须是以from开头,以select 或者 group结尾巴   
            //注意,query变量,只是指定了一个查询方式,并没有执行,真正的执行其实是在foreach时才产生的   
 
            //推迟查询的执行   
            //推迟查询的执行也就是说查询是在跌代时才执行的,不是var query中,下面我们来用代码证实   
 
            Console.WriteLine( "增加新内容后的输出--------------") ;  
            lists.Add( new Person( "newaladdin" , 22 ) ) ;  
            //我们增加了一个新对象,22岁,明显是符合条件的,下面我们二次跌代   
            foreach( Person per in query )  
            {  
                Console.WriteLine( per.name +  "  " + per.age ) ;  
            }  
            //可以看出,第二次跌代完全可以接触到新对象,而我们并没有定义新的query 这就是推迟查执行   
 
 
            Console.ReadLine() ;  
        }  
 
        class Person  
        {  
            public string name ;  
            public int age ;  
 
            public Person( string name , int age )  
            {  
                this.name = name ;  
                this.age = age ;  
            }  
        }  
    }  



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aladdinty/archive/2008/12/23/3592079.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值