国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

LINQ基礎

2019-11-17 02:27:11
字體:
來源:轉載
供稿:網友

LINQ基礎

以下為《C#圖解教程》讀書筆記LINQ是直接嵌入C#的強類型查詢語言與LINQ相關的特性:隱式類型的本地變量:使用var對象/集合初始化語法:對象初始化語句/對象初始化器/對象初始化表Lamdba表達式:lambda表達式擴展方法//寫一個靜態類給已知類添加方法,使用時看起來這個類里面本來就有這個方法.匿名類型:匿名類型LiNQ可應用方面:LINQ語法有兩種形式語法,兩著性能上沒區別:舉例:假設已定義了一個數組numbers方法語法:var A=numbers.Where(x=>x<20);//這里用到了Lambda查詢語法:var A=from n in numbers where n<20 select n;//這里返回了一個對象,這個對象能形容具體的查詢步驟,這里并沒有進行查詢動作查詢變量:查詢結果一般為一組可枚舉的數據或者一個叫做標量的單一值一組可枚舉數據:上面的查詢語法的A不包含查詢結果,相反,編譯器會創建能夠執行這個查詢的代碼標量:int count=(from n in numbers where n<20 select n).Count();//這里是查詢語句與方法語句的結合count包含的是真實的整數值,它只能通過真實運行查詢才能得到查詢表達式結構注意事項:
  • 按照一定的順序出現
  • from子句和select...group子句是必須的
  • 其他語句是可選的
  • select子句在表達式最后
from子句from指定了查詢的數據集合,每一個LINQ查詢都要以from開始語法:frome type Item in Items//type 是可選的,因為編譯器會幫你推斷與foreach的區別foreach指定從第一個開始到結束,from之規定集合的每一項都要訪問foreach遇到代碼就執行主體,from 只是創建可執行查詢的后臺代碼對象jion 聯結:使用聯結來結合多個集合的數據聯結操作接受兩個集合然后創建一個臨時的對象集合,每一個對象包含原始集合中的所有字段.語法:自我理解:聯結就是把join前的集合與jion后的集合合成一個集合,當然要設置一些選擇條件還是看代碼說話書上:代碼示例:
  1.  1 //這個代碼聲明了兩個類 2 //第一個代表學生,每個學生都有學生的名字和ID 3 //第二個代表課程,每個課程類都有學生的ID和課程的名字 4 class PRogram 5 { 6     public class Student 7     { 8         public int StID; 9         public string LastName;10     }11     public class CourseStudent12     {13         public string CourseName;14         public int StID;15     }16     //在全局中創建學生類與課程類17     //課程類與學生類中有一樣的ID18     static Student[] students =newStudent[]{19         new Student{StID=1,LastName="Carson"},20         new Student{StID=2,LastName="Klassen"},21         new Student{StID=3,LastName="Fleming"},22     };23     static CourseStudent[] studentsInCourses =new CourseStuden t[]{24         new CourseStudent{CourseName="Art",StID=1},25         new CourseStudent{CourseName="Art",StID=2},26         new CourseStudent{CourseName="History",StID=1},27         new CourseStudent{CourseName="History",StID=3},28         new CourseStudent{CourseName="Physics",StID=3},29     };30     static void Main()31     {32         var query =from s in students//開始查詢,在一個集合內查詢33                     join c in studentsInCourses on s.StID equals c.StID34                     //而這個集合是,由兩個集合的部分組成,上面的意思是:35                     //定義students的迭代變量a36                     //定義studentsInCourses迭代變量c37                     //聯結這連個集合中的成員,并生成新的一個集合38                     //聯結結果是:把兩個集合成員具有相同StID的拿出來組成一個新的集合39                     where c.CourseName=="History"40                     //找出新集合中CourseName== "History"的成員41                     select s.LastName;42                     //把這些成員的LastName返回43         foreach(var q in query)44         Console.WriteLine("Student taking History: {0}", q);45         Console.ReadKey();46     }47 }

聯結過程圖例:左students右CourseName每次拿去students的元素更CourseName比較比較兩者的StID值陰影為聯結結果from... let.... where子句from語句每一個from語句都引入一個新的數據源
  1.  1 class Program 2 { 3     static void Main() 4     { 5         var groupA =new[]{3,4,5,6}; 6         var groupB =new[]{6,7,8,9}; 7         var someInts =from a in groupA//必須的第一個from語句 8                     from b in groupB//主句中的from語句 9                     select new{ a, b, sum=a+b };//創建一個匿名類型10         foreach(var a in someInts )11         Console.WriteLine( a );//很神奇,"a=","b="自動寫了12     }13 }

let子句接受一個表達式式的運算并且把它復制給一個需要在其他運算中使用的標示符
  1.  1 class Program 2 { 3     static void Main() 4     { 5         var groupA =new[]{3,4,5,6}; 6         var groupB =new[]{6,7,8,9}; 7         var someInts =from a in groupA 8                     from b in groupB 9                     let sum = a + b10                     where sum ==1211                     select new{ a, b, sum };12         foreach(var a in someInts )13         Console.WriteLine( a );14     }15 }

結果:where子句where子句根據之后的運算來去除不符合指點條件的項注意:只要在from...let...where部分中,查詢表達式可以是任意個
  1.  1 static void Main() 2 { 3     var groupA =new[]{3,4,5,6}; 4     var groupB =new[]{6,7,8,9}; 5     var someInts =from int a in groupA 6                 from int b in groupB 7                 let sum = a + b 8                 where sum >=11 9                 where a ==410                 select new{ a, b, sum };11     foreach(var a in someInts )12     Console.WriteLine( a );13 }

orderbyorderby子句接受一個表達式并根據表達式按順序返回結果項表達式通常是字段,但不一定是數值型,也可以是字符串表達式后面能跟(ascending或descending)//可選的,分別用來設置升序或者降序,默認升序
  1.  1 classProgram 2 { 3     static void Main() 4     { 5         var students =new[] 6         { 7             new{LName="Jones",FName="Mary",Age=19,Major="History"}, 8             new{LName="Smith",FName="Bob",Age=20,Major="CompSci"}, 9             new{LName="Fleming",FName="Carol",Age=21,Major="History"}10         };11         var query =from student in students12         orderby student.Age ascending//降序descending13         select student;14         foreach(var s in query)15         {16             Console.WriteLine("{0}, {1}: {2} - {3}",17             s.LName, s.FName, s.Age, s.Major);18         }19         Console.ReadKey();20     }21 }

select...group子句由兩個部分組成select...group:select子句和group...by子句select子句select子句指定了所選對象的哪一個部分被選擇這個部分可以是:整個數據項數據項的一個字段數據項的幾個字段組成的新對象//匿名類型group...bygroup...by子句是可選的,用來指定選擇項是如何被分組.group語句吧select的對象根據一些標準進行分組,如果僅僅寫了from語句和goup by語句,返回的是IEnumerable<IGrouping<鍵,值>>
  1.  1 classProgram 2 { 3     static void Main() 4     { 5         var students =new[] 6         { 7             new{LName="Jones",FName="Mary",Age=19,Major="History"}, 8             new{LName="Smith",FName="Bob",Age=20,Major="CompSci"}, 9             new{LName="Fleming",FName="Carol",Age=21,Major="History"}10         };11         var query =from student in students12                    group student by student.Major;13                    //query是返回的是IEnumerable<IGrouping<鍵,值>>,所以下面不能直接打印14         foreach(var s in query )15         {16             Console.WriteLine("{0}", s.Key);//key是分組鍵17             foreach(var t in s )18             Console.WriteLine(" {0}, {1}", t.LName, t.FName);19         }20     }21 }

into子句插敘延續子句可以接受查詢的一部分結果并賦予新的名字,把它用于其它的查詢
  1.  1 classProgram 2 { 3     static void Main() 4     { 5         var groupA =new[]{3,4,5,6}; 6         var groupB =new[]{4,5,6,7}; 7         var someInts =from a in groupA 8                         join b in groupB on a equals b 9
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 紫金县| 东莞市| 招远市| 关岭| 修文县| 梅州市| 抚远县| 电白县| 韩城市| 北海市| 华池县| 景洪市| 楚雄市| 惠安县| 鹤壁市| 蒙自县| 陇南市| 西丰县| 泌阳县| 比如县| 界首市| 吉木萨尔县| 东海县| 开平市| 沙田区| 庄浪县| 外汇| 孝昌县| 西林县| 万盛区| 武夷山市| 繁昌县| 普兰店市| 隆子县| 凌海市| 且末县| 盘山县| 海城市| 饶平县| 商水县| 银川市|