首先,我們來看壹個非常簡單的LINQ查詢的例子,在這個例子中,壹個int數組中的數字小於5,並且按照大小的順序排列:
靜態void Main(string[] args)
{
int[] arr = new int[] { 8,5,89,41,1,2,3,65,1 };
var m = from n in arr其中n & lt5 orderby n降序選擇n;//小於5,以閃回排列顯示。
foreach(變量n以m為單位)
{
控制臺。寫線(n);
}
控制臺。ReadLine();
}
以上代碼都是大家熟悉的語法,除了LINQ查詢語法,LINQ查詢語法和SQL查詢語法非常相似,除了序列。
問:為什麽LINQ查詢語法以from關鍵字而不是select關鍵字開始?select開頭的寫法比SQL更接近,更容易理解。
答:簡單來說,對於IDE的Intel感知的功能,select關鍵字放在後面。
編程語言在select開頭編寫LINQ查詢語法的情況並不少見。如果妳用的是2005年的VB9 CTP版本,那麽VB9的LINQ查詢語法是select關鍵字在前,但是select關鍵字在前面,做Intelisence的時候很大。微軟IDE組平衡後,確定把from關鍵字放在前面。
當時VB9 LINQ的查詢語法還是前面的select參數。但是後來VB9的beta版也改成了和C#壹樣的方式,from關鍵字放在了前面。
更詳細的解釋來自組裝頭部。
假設妳要寫這樣壹個代碼:在persons where XXX中從p中選擇p.name,p.age,代碼壹個壹個輸入。
在我們在persons中寫P之前,P的類型是無法推測的,所以在我們寫Select P的時候,名字等屬性是不會彈出智能提示的。
這樣,妳需要先寫From,然後再回來寫Select。
微軟IDE組反復考慮後決定,以後再寫Select比較好。所以編程語言中的寫法確定是這樣寫的。
VB9中的這壹變化可以在這個博客中找到:
Select/From與From/Select重訪...
讓我們看壹個稍微復雜壹點的LINQ查詢:
在我們列出的語言字符串中,我們希望按照字符的長度分類列出,實現代碼如下:
靜態void Main(string[] args)
{
string[]語言= { Java,C#,C++,Delphi,VB.net,VC.net,C++Builder,Kylix,Perl,Python };
var query =來自語言中的項目
逐項分組。長度分成長度組
orderby長度組。鑰匙
選擇長度組;
foreach(查詢中的變量項)
{
控制臺。WriteLine(長度為{0}的字符串,項。關鍵);
foreach(項目中的變量值)
{
控制臺。寫線(val);
}
}
控制臺。ReadLine();
}
into關鍵字意味著將前壹個查詢的結果作為後續查詢的生成器,與group by壹起使用。
不要把LINQ的Group by和SQL的Group by混為壹談,因為SQL是二維結構,Group by的壹些邏輯受到二維結構的約束,所以不能像LINQ的Group by那樣靈活。
事實上,LINQ的查詢語法有以下兩種形式:
查詢方法:(方法語法)
本文主要使用系統中定義的擴展方法和Lambda表達式。要查詢的可枚舉類。
查詢語句模式:(查詢語法)更接近SQL語法的查詢模式,可讀性更強。