LINQ查詢句法簡單概括
在向大家詳細介紹LINQ查詢句法之前,首先讓大家了解下Lambda表達式,然后全面介紹LINQ查詢句法。
Lambda表達式
- var list = new [] { "aa", "bb", "ac" };
- var result = Array.FindAll(list, s => (s.IndexOf("a") > -1));
- foreach (var v in result)
- Console.WriteLine(v);
其實和2.0中的匿名方法差不多,都是用于產生內聯方法,只不過Lambda表達式的語法更為簡潔。語法如下:
(參數列表) => 表達式或者語句塊
其中:
參數個數:可以有多個參數,一個參數,或者無參數。
表達式或者語句塊:這部分就是我們平常寫函數的實現部分(函數體)。
下面結合擴展方法來一個復雜的例子:
- 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查詢句法
- 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查詢句法是使用標準的LINQ查詢運算符來表達查詢時一個方便的聲明式簡化寫法。該句法能在代碼里表達查詢時增進可讀性和簡潔性,讀起來容易,也容易讓人寫對。Visual Studio 對查詢句法提供了完整的智能感應和編譯時檢查支持。編譯器在底層把查詢句法的表達式翻譯成明確的方法調用代碼,代碼通過新的擴展方法和Lambda表達式語言特性來實現。上面的查詢句法等價于下面的代碼:
- var selectperson = persons.Where(p=>p.age>=20).Select(p=>p.username.ToUpper());
LINQ查詢句法可以實現90%以上T-SQL的功能(由于T-SQL是基于二維表的,所以LINQ查詢語法會比T-SQL更簡單和靈活),但是由于智能感應的原因,select不能放在一開始就輸入。
【編輯推薦】