LINQ 查詢第一步指定資料源。from 子句引入資料源 (customers) 與範圍變數 (cust):
// queryAllCustomers 是 IEnumerable<Customer>
var queryAllCustomers = from cust in customers select cust;
範圍變數類似 foreach 迭代變數,但查詢表達式中不實際迭代。編譯器可推斷類型,無需顯式指定。其他範圍變數可由 let 子句引入。
最常用操作:布林運算式篩選器,where 子句指定排除元素:
var queryLondonCustomers = from cust in customers
where cust.City == "London"
select cust;
多條件組合:
where cust.City == "London" && cust.Name == "Devon" // AND
where cust.City == "London" || cust.City == "Paris" // OR
orderby 子句依預設比較器排序:
var queryLondonCustomers3 = from cust in customers
where cust.City == "London"
orderby cust.Name ascending
select cust;
降序:orderby ... descending。
group 子句依指定鍵分組:
// queryCustomersByCity 是 IEnumerable<IGrouping<string, Customer>>
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);
}
結果為列表的列表,每個元素含 Key 與分組元素列表。巢狀 foreach 迭代。
into 關鍵字建立識別符進一步查詢分組結果:
var custQuery = from cust in customers
group cust by cust.City into custGroup
where custGroup.Count() > 2
orderby custGroup.Key
select custGroup;
join 子句建立資料源間未顯式建模的關聯。LINQ 對物件集合而非直接對資料庫表運作。因外鍵在物件模型中表現為包含項集合屬性 (如 Customer.Orders),較少需顯式 join,可用點標記法存取。
select 子句產生查詢結果,指定回傳元素「形狀」或類型:整個物件、單一成員、子集、或全新計算結果類型。產生非來源元素副本的操作稱為「投影」,是 LINQ 強大轉換資料功能。