c# linq 學習

最近由於工做須要開始學習linq了,以前接觸過一些c#,但基礎並不牢靠。如今再根據須要學習。這裏僅做爲學習過程的記錄,錯誤之處還請評論指正。數據庫

一、查詢操做三部曲編程

(1)、獲取數據源c#

var  db = new Northwnd(@"c:\northwnd.mdf");緩存

 

(2)、建立查詢編程語言

//查詢在倫敦的客戶函數式編程

var custQuery =函數

from cust in db.Customers學習

where cust.City == "London"spa

select cust;對象

 

(3)、執行查詢

延遲執行 

 foreach (var cust in custQuery )

            {

                Console.WriteLine("{0}", cust);

                Console.ReadLine();

            }

 

強制當即執行任意查詢並緩存其結果,能夠調用 ToList<TSource>  ToArray<TSource> 方法。

 

//獲取數據源

            var nums = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

  //建立查詢並執行

            var numQuery =

                (from num in nums

                where (num % 2) == 0

                select num).ToList();

二、詳解

 獲取數據源 from

  LINQ 查詢中,第一步是指定數據源。像在大多數編程語言中同樣,必須先聲明變量,才能使用它。在 LINQ 查詢中,最早使用 from 子句的目的是引入數據源和範圍變量。

//queryAllCustomers IEnumerable<Cutsomer> 類型

 //數據源 (customers) 和範圍變量 (cust)

     Var queryAllCustomers =

from cust in customers

      select cust;

篩選:where

最經常使用的查詢操做是應用布爾表達式形式的篩選器,使用 where 子句生成結果

使用熟悉的 C# 邏輯 AND&&)和 OR|| 運算符來根據須要在 where 子句中應用任意數量的篩選表達式。

where cust.City = "London" && cust.Name = "Devon"

where cust.City="London" ||cust.Name = "Devon"

排序:orderby

默認比較器將按字母順序從 A Z 進行排序

 var queryLondonCustomers = from cust in customers

       where cust.City = "London"

       orderby cust.Name descending 

       select cust;

 

聯接:join

聯接運算建立數據源中沒有顯式建模的序列之間的關聯。例如,您能夠執行聯接來查找位於同一地點的全部客戶和經銷商。在 LINQ 中,join 子句始終針對對象集合而非直接針對數據庫表運行。

var innerJoinQuery = from cust in customers

 join dist in distributors on cust.City equals dist.City

  select new {

CustomerName = cust.Name,

DistributorName = dist.Name

};

 

 

選擇各個源元素的子集

 若要只選擇源元素的一個成員,請使用點運算。

 var query = from cust in Customers

   select cust.City;

 若要建立包含源元素的多個屬性的元素,可使用具備命名對象或匿名類型的對象初始值設定項。

var query = from cust in Customer

 select new {

Name = cust.Name,

City = cust.City

};

 

 

 

 

Lambda表達式

"Lambda表達式"是一個匿名函數,是一種高效的相似於函數式編程的表達式,Lambda簡化了開發中須要編寫的代碼量。

全部Lambda表達式都使用Lambda運算符=>,該運算符讀做"goes to"Lambda運算符的左邊是輸入參數(若是有),右邊是表達式或語句塊。

例:delegate int del(int i);

static void Main(string[] args)

{

    del myDelegate = x => x * x;

    int j = myDelegate(5); //j = 25

}

 

 

 

備註:

● First:返回序列中的第一條記錄,若是沒有記錄,則引起異常。

 

    ● FirstOrDefault:返回序列中的第一條記錄,若是沒有記錄,則返回默認值。

 

    ● Single:返回序列中的惟一記錄,若是沒有或返回多條記錄,則引起異常。

 

● SingleOrDefault:返回序列中的惟一記錄;若是該序列爲空,則返回默認值;若是該序列包含多個元素,則引起異常。

 

分組

group 子句用於對根據您指定的鍵所得到的結果進行分組。 例如,可指定按 City 對結果進行分組,使來自 London Paris 的全部客戶位於單獨的組內。 在這種狀況下,cust.City 是鍵。

  var queryCustomersByCity =

      from cust in customers

      group cust by cust.City;

 

  foreach (var customerGroup in queryCustomersByCity)

  {

      Console.WriteLine(customerGroup.Key);

      foreach (Customer customer in customerGroup)

      {

          Console.WriteLine("    {0}", customer.Name);

      }

  }

相關文章
相關標籤/搜索