最近由於工做須要開始學習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);
}
}