自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LINQ查詢語法簡單描述

開發(fā) 后端
這里介紹為何LINQ查詢語法是以 from 關(guān)鍵字開頭的,而不是以 select 關(guān)鍵字開頭的?select 開頭這種寫法跟SQL的寫法更接近,更易懂呀?

學習LINQ時,經(jīng)常會遇到LINQ查詢語法問題,這里將介紹LINQ查詢語法問題的解決方法。

C#3.0 LINQ查詢語法

首先來看一個很簡單的LINQ查詢例子,查詢一個int 數(shù)組中小于5的數(shù)字,并按照大小順序排列:

  1. class Program  
  2. {  
  3. static void Main(string[] args)  
  4. {  
  5. int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };  
  6. var m = from n in arr where n < 5 orderby n select n;  
  7. foreach (var n in m)  
  8. {  
  9. Console.WriteLine(n);  
  10. }  
  11. Console.ReadLine();  
  12. }  

上述代碼除了LINQ查詢語法外,其他都是我們所熟悉的語法,而LINQ查詢語法跟SQL查詢語法很相識,除了先后順序。

Q:為何 LINQ查詢語法是以 from 關(guān)鍵字開頭的,而不是以 select 關(guān)鍵字開頭的?select 開頭這種寫法跟SQL的寫法更接近,更易懂呀?

A:簡單來說,為了IDE的智能感知(Intelisence)這個功能,select 關(guān)鍵字放在后面了。

編程語言以 select 開頭寫LINQ查詢語法不是沒出現(xiàn)過,你如果使用過2005年的VB9 CTP 版本,那時候VB9的LINQ查詢語法就是 select 關(guān)鍵字在前面,但是 select 關(guān)鍵字在前面,在做智能感知(Intelisence)時候就很頭大。經(jīng)過微軟IDE組的權(quán)衡,確定了把 from 關(guān)鍵字放在最前面。

比如:你看http://blog.joycode.com/saucer/archive/2005/09/16/63513.aspx 這篇博客,那時候 VB9 LINQ的查詢語法還是 select 參數(shù)在最前面。不過后來 VB9 測試版改成了跟 C# 一樣的做法, from 關(guān)鍵字放在最前面了。

假設你要書寫這樣的代碼:Select p.Name, p.Age From p In persons Where xxx ,代碼是一個個字符輸入的。我們在寫到 p in persons 之前,p 的類型是無法推測的,所以寫 Select p. 的時候,Name之類的屬性不會彈出智能提示來。這樣就需要先去寫 From 這句,再回來寫 Select。微軟IDE組經(jīng)過反復考慮決定,還不如就把 Select 寫到后面了。于是編程語言中的寫法就確定這樣來寫了。

我們再來看一個稍稍復雜的LINQ查詢:

在我們羅列的語言字符串中,我們希望按照字符長短,分類羅列出來,實現(xiàn)代碼如下:

  1. static void Main(string[] args)  
  2. {  
  3. string [] languages = {"Java","C#","C++","Delphi","VB.net",
    "VC.net","C++ Builder","Kylix","Perl","Python"};  
  4. var query = from item in languages  
  5. orderby item  
  6. group item by item.Length into lengthGroups  
  7. orderby lengthGroups.Key descending  
  8. select lengthGroups;  
  9. foreach (var item in query)  
  10. {  
  11. Console.WriteLine("strings of length ",item.Key);  
  12. foreach (var val in item)  
  13. {  
  14. Console.WriteLine(val);  
  15. }  
  16. }  
  17. Console.ReadLine();  

其中的 into 關(guān)鍵字表示 將前一個查詢的結(jié)果視為后續(xù)查詢的生成器,這里是跟 group   by   一起使用的。

LINQ中的Group by不要跟 SQL 中的Group by 混淆,SQL 由于是二維結(jié)構(gòu),Group by 的一些邏輯受二維結(jié)構(gòu)的約束,無法象 LINQ 中的Group by 這么靈活。

【編輯推薦】

  1. Linq to SQL學習經(jīng)驗
  2. Linq隱式類型化局部變量
  3. Linq匿名類型簡單概述
  4. Linq Lambda表達式剖析
  5. Linq對象初始值淺談
責任編輯:佚名 來源: CSDN
相關(guān)推薦

2009-09-08 09:24:50

LINQ查詢

2009-09-14 10:57:46

LINQ入門

2009-09-09 15:28:43

Linq to obj

2009-09-15 16:26:36

Linq orderb

2009-09-18 16:00:07

LINQ架構(gòu)

2009-09-17 08:47:00

Linq查詢

2009-09-10 09:09:40

Linq實體繼承

2009-09-11 10:20:36

Linq擴展方法

2009-09-17 09:24:57

Linq實現(xiàn)分頁

2009-09-09 16:53:53

LINQ查詢語法

2009-09-11 12:32:33

LINQ表達式

2009-09-10 16:28:17

LINQ查詢

2009-09-09 11:24:13

Linq使用數(shù)據(jù)表

2009-09-09 13:07:37

創(chuàng)建Linq數(shù)據(jù)庫

2009-09-15 15:18:40

Linq連接查詢

2009-09-15 14:58:26

Linq查詢本質(zhì)

2009-09-15 16:09:12

LINQ進行查詢

2009-09-17 11:08:55

LINQ查詢表達式

2009-09-07 17:05:10

LINQ進行查詢

2009-09-09 15:10:35

LINQ查詢句法
點贊
收藏

51CTO技術(shù)棧公眾號