LINQ查詢(xún)句法簡(jiǎn)單概括
在向大家詳細(xì)介紹LINQ查詢(xún)句法之前,首先讓大家了解下Lambda表達(dá)式,然后全面介紹LINQ查詢(xún)句法。
Lambda表達(dá)式
- var list = new [] { "aa", "bb", "ac" };
- var result = Array.FindAll(list, s => (s.IndexOf("a") > -1));
- foreach (var v in result)
- Console.WriteLine(v);
其實(shí)和2.0中的匿名方法差不多,都是用于產(chǎn)生內(nèi)聯(lián)方法,只不過(guò)Lambda表達(dá)式的語(yǔ)法更為簡(jiǎn)潔。語(yǔ)法如下:
(參數(shù)列表) => 表達(dá)式或者語(yǔ)句塊
其中:
參數(shù)個(gè)數(shù):可以有多個(gè)參數(shù),一個(gè)參數(shù),或者無(wú)參數(shù)。
表達(dá)式或者語(yǔ)句塊:這部分就是我們平常寫(xiě)函數(shù)的實(shí)現(xiàn)部分(函數(shù)體)。
下面結(jié)合擴(kuò)展方法來(lái)一個(gè)復(fù)雜的例子:
- public delegate int mydg(int a, int b);
- public static class LambdaTest
- {
- public static int oper(this int a, int b, mydg dg)
- {
- return dg(a, b);
- }
- }
- Console.WriteLine(1.oper(2, (a, b) => a + b));
- Console.WriteLine(2.oper(1, (a, b) => a - b));
LINQ查詢(xún)句法
- var persons = new List<Person> {
- new Person {username = "a", age=19},
- new Person {username = "b", age=20},
- new Person {username = "a", age=21},
- };
- var selectperson = from p in persons where p.age >= 20 select p.username.ToUpper();
- foreach(var p in selectperson)
- Console.WriteLine(p);
LINQ查詢(xún)句法是使用標(biāo)準(zhǔn)的LINQ查詢(xún)運(yùn)算符來(lái)表達(dá)查詢(xún)時(shí)一個(gè)方便的聲明式簡(jiǎn)化寫(xiě)法。該句法能在代碼里表達(dá)查詢(xún)時(shí)增進(jìn)可讀性和簡(jiǎn)潔性,讀起來(lái)容易,也容易讓人寫(xiě)對(duì)。Visual Studio 對(duì)查詢(xún)句法提供了完整的智能感應(yīng)和編譯時(shí)檢查支持。編譯器在底層把查詢(xún)句法的表達(dá)式翻譯成明確的方法調(diào)用代碼,代碼通過(guò)新的擴(kuò)展方法和Lambda表達(dá)式語(yǔ)言特性來(lái)實(shí)現(xiàn)。上面的查詢(xún)句法等價(jià)于下面的代碼:
- var selectperson = persons.Where(p=>p.age>=20).Select(p=>p.username.ToUpper());
LINQ查詢(xún)句法可以實(shí)現(xiàn)90%以上T-SQL的功能(由于T-SQL是基于二維表的,所以LINQ查詢(xún)語(yǔ)法會(huì)比T-SQL更簡(jiǎn)單和靈活),但是由于智能感應(yīng)的原因,select不能放在一開(kāi)始就輸入。
【編輯推薦】