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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#3.0 LINQ 查詢語法

2019-11-18 16:31:32
字體:
供稿:網(wǎng)友

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

class PRogram
{
    static void Main(string[] args)
    {
        int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };

        var m = from n in arr where n < 5 orderby n select n;
        foreach (var n in m)
        {
            Console.WriteLine(n);
        }
        Console.ReadLine();
    }
}

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


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

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

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

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

更詳細(xì)的解釋,來自裝配腦袋

假設(shè)你要書寫這樣的代碼:Select p.Name, p.Age From p In persons Where xxx ,代碼是一個(gè)個(gè)字符輸入的。

我們?cè)趯懙?p in persons 之前,p 的類型是無法推測(cè)的,所以寫 Select p. 的時(shí)候,Name之類的屬性不會(huì)彈出智能提示來。

這樣就需要先去寫 From 這句,再回來寫 Select。

微軟IDE組經(jīng)過反復(fù)考慮決定,還不如就把 Select 寫到后面了。于是編程語言中的寫法就確定這樣來寫了。

VB9 的這個(gè)變化可以參看這篇博客:

Select/From vs. From/Select revisited...


我們?cè)賮砜匆粋€(gè)稍稍復(fù)雜的LINQ查詢:

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

static void Main(string[] args)
{
    string [] languages = {"java","C#","C++","Delphi","VB.net","VC.net","C++ Builder","Kylix","Perl","Python"};

    var query = from item in languages
                orderby item
                group item by item.Length into lengthGroups
                orderby lengthGroups.Key descending
                select lengthGroups;

    foreach (var item in query)
    {
        Console.WriteLine("strings of length {0}",item.Key);
        foreach (var val in item)
        {
            Console.WriteLine(val);
        }
    }
    Console.ReadLine();
}

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 越西县| 台湾省| 库伦旗| 武穴市| 格尔木市| 枣强县| 桃江县| 专栏| 桑植县| 宁武县| 新余市| 平顺县| 大竹县| 黄石市| 彩票| 涟源市| 永嘉县| 西畴县| 通州区| 兴国县| 丽水市| 哈尔滨市| 德安县| 西乌珠穆沁旗| 彩票| 攀枝花市| 博兴县| 西吉县| 涿鹿县| 哈尔滨市| 锡林郭勒盟| 尼木县| 通州市| 泰州市| 黑山县| 商洛市| 泽州县| 象山县| 毕节市| 平顺县| 定远县|