LINQ 查詢表達式中 select 子句位於最後,負責定義回傳結果形狀,支援豐富的投影形式。
var q = from c in db.Customers select c.ContactName;
// 保留原屬性名
var q = from c in db.Customers select new { c.ContactName, c.Phone };
// 重新命名屬性
var q = from e in db.Employees
select new { Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone };
// 計算衍生欄位
var q = from p in db.Products
select new { p.ProductID, HalfPrice = p.UnitPrice / 2 };
匿名型別由編譯器自動產生唯讀屬性類別,屬性名可保留、重命名或運算產生。
var q = from p in db.Products
select new { p.ProductName, PriceLevel = p.UnitPrice > 50 ? "High" : "Low" };
var q = from c in db.Customers
select new CustomerDTO { ID = c.CustomerID, Name = c.ContactName };
(略,原理同前)
var q = (from c in db.Customers select c.Country).Distinct();
| 函數 | SQL 對應 | 範例 |
|---|---|---|
| Count() | COUNT(*) | db.Customers.Count() |
| Sum() | SUM | db.Orders.Sum(o => o.Freight) |
| Min() | MIN | db.Products.Min(p => p.UnitPrice) |
| Max() | MAX | db.Products.Max(p => p.UnitPrice) |
| Average() | AVG | db.Products.Average(p => p.UnitPrice) |
所有查詢均為延遲執行,至實體化時才發送 SQL。