- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
-
- namespace LINQ技術(shù)
- {
- class Program
- {
- static void Main(string[] args)
- {
- //LINQ中的Where擴(kuò)展方法,要想使用,必須導(dǎo)入using System.Linq;
- //下面我們看一下這個(gè)方法的聲明
- //public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source,Func<TSource, bool> predicate )
- //返回類型是:IEnumerable<TSource>
- //第一參數(shù)this IEnumerable<TSource> source代表的是他要擴(kuò)展的類型,也就是說(shuō)在IEnumerable<TSource>可以直接調(diào)用where方法
- //Func<TSource, bool> predicate第二個(gè)參數(shù)是一個(gè)委托,下面我們看一下他的聲明
- //public delegate TResult Func<T, TResult>( T arg ) 封裝一個(gè)帶有T類型,返回Tresult類型的方法
- //下面我們使用Linq中的Where方法來(lái)檢索我們的列表
- //我們做一個(gè)List<T>的列表,其中存放Person對(duì)象,然后我們用where方法檢索出年紀(jì)在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 ) ;
- }
- //結(jié)果 aladdin jacky
-
- //其實(shí)Linq一般的查詢,是可以直接寫where select 等語(yǔ)句來(lái)實(shí)現(xiàn),系統(tǒng)編譯時(shí),會(huì)自動(dòng)將他轉(zhuǎn)化成擴(kuò)展方法的調(diào)用
- 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語(yǔ)句必須是以from開頭,以select 或者 group結(jié)尾巴
- //注意,query變量,只是指定了一個(gè)查詢方式,并沒(méi)有執(zhí)行,真正的執(zhí)行其實(shí)是在foreach時(shí)才產(chǎn)生的
-
- //推遲查詢的執(zhí)行
- //推遲查詢的執(zhí)行也就是說(shuō)查詢是在跌代時(shí)才執(zhí)行的,不是var query中,下面我們來(lái)用代碼證實(shí)
-
- Console.WriteLine( "增加新內(nèi)容后的輸出--------------") ;
- lists.Add( new Person( "newaladdin" , 22 ) ) ;
- //我們?cè)黾恿艘粋€(gè)新對(duì)象,22歲,明顯是符合條件的,下面我們二次跌代
- foreach( Person per in query )
- {
- Console.WriteLine( per.name + " " + per.age ) ;
- }
- //可以看出,第二次跌代完全可以接觸到新對(duì)象,而我們并沒(méi)有定義新的query 這就是推遲查執(zhí)行
-
-
- Console.ReadLine() ;
- }
-
- class Person
- {
- public string name ;
- public int age ;
-
- public Person( string name , int age )
- {
- this.name = name ;
- this.age = age ;
- }
- }
- }
- }
|