C#3.0新增功能09 LINQ 基礎08 支持 LINQ 的 C# 功能

查詢表達式
查詢表達式使用相似於 SQL 或 XQuery 的聲明性語法來查詢 IEnumerable 集合。 在編譯時,查詢語法轉換爲對 LINQ 提供程序的標準查詢運算符擴展方法實現的方法調用。 應用程序經過使用 using 指令指定適當的命名空間來控制範圍內的標準查詢運算符。 下面的查詢表達式獲取一個字符串數組,按字符串中的第一個字符對字符串進行分組,而後對各組進行排序。
var query = from str in stringArray
            group str by str[0] into stringGroup
            orderby stringGroup.Key
            select stringGroup;

有關詳細信息,請參閱 LINQ 查詢表達式html

隱式類型化變量 (var)
可使用 var 修飾符來指示編譯器推斷並分配類型,而沒必要在聲明並初始化變量時顯式指定類型,以下所示:
var number = 5;
var name = "Virginia";
var query = from str in stringArray
            where str[0] == 'm'
            select str;

聲明爲 var 的變量與顯式指定其類型的變量同樣都是強類型。 經過使用 var,能夠建立匿名類型,但它只能用於本地變量。 也可使用隱式類型聲明數組。express

有關詳細信息,請參閱隱式類型局部變量編程

對象和集合初始值設定項
經過對象和集合初始值設定項,初始化對象時無需爲對象顯式調用構造函數。 初始值設定項一般用在將源數據投影到新數據類型的查詢表達式中。 假定一個類名爲 Customer,具備公共 Name 和 Phone 屬性,能夠按下列代碼中所示使用對象初始值設定項:
var cust = new Customer { Name = "Mike", Phone = "555-1212" };

繼續咱們的 Customer 類,假設有一個名爲 IncomingOrders 的數據源,而且每一個訂單具備一個較大的 OrderSize,咱們但願基於該訂單建立新的 Customer。 能夠在此數據源上執行 LINQ 查詢,並使用對象初始化來填充集合:api

var newLargeOrderCustomers = from o in IncomingOrders
                            where o.OrderSize > 5
                            select new Customer { Name = o.Name, Phone = o.Phone };

數據源可能具備比 Customer 類更多的屬性,例如 OrderSize,但執行對象初始化後,從查詢返回的數據被定型爲所需的數據類型;咱們選擇與咱們的類相關的數據。 所以,咱們如今有填充了咱們想要的多個新 Customer 的 IEnumerable。 上述代碼也可使用 LINQ 的方法語法編寫:數組

var newLargeOrderCustomers = IncomingOrders.Where(x => x.OrderSize > 5).Select(y => new Customer { Name = y.Name, Phone = y.Phone });

 

匿名類型

匿名類型由編譯器構造,且類型名稱只可用於編譯器。 匿名類型提供一種在查詢結果中對一組屬性臨時分組的簡便方法,無需定義單獨的命名類型。 使用新的表達式和對象初始值設定項初始化匿名類型,以下所示:ide

select new {name = cust.Name, phone = cust.Phone};

有關詳細信息,請參閱匿名類型函數

擴展方法

擴展方法是一種可與類型關聯的靜態方法,所以能夠像實例方法那樣對類型調用它。 實際上,利用此功能,能夠將新方法「添加」到現有類型,而不會實際修改它們。 標準查詢運算符是一組擴展方法,它們爲實現 IEnumerable<T> 的任何類型提供 LINQ 查詢功能。ui

有關詳細信息,請參閱擴展方法spa

Lambda 表達式

Lambda 表達式是一種內聯函數,該函數使用 => 運算符將輸入參數與函數體分離,而且能夠在編譯時轉換爲委託或表達式樹。 在 LINQ 編程中,在對標準查詢運算符進行直接方法調用時,會遇到 lambda 表達式。code

有關詳細信息,請參見:

其餘技術請參閱

 

相關文章
相關標籤/搜索