掌握 LINQ to SQL 的集合運算子、分頁技巧與 SQL 專用方法對應。
var q = (from c in db.Customers select c.Phone)
.Concat(from c in db.Customers select c.Fax)
.Concat(from e in db.Employees select e.HomePhone);
var q = (from c in db.Customers select c.Country)
.Union(from e in db.Employees select e.Country);
語法同 Union,分別對應 SQL INTERSECT、EXCEPT。
int pageSize = 10, pageIndex = 2; // 第 3 頁
var q = db.Customers
.OrderBy(c => c.CustomerID)
.Skip(pageSize * pageIndex)
.Take(pageSize);
生成 SQL 使用 ROW_NUMBER() OVER (ORDER BY ...) 配合 WHERE rn BETWEEN ...,效能佳。
| 方法 | SQL 對應 | 範例 |
|---|---|---|
| Like | LIKE | SqlMethods.Like(c.ContactName, "A%") |
| DateDiffDay | DATEDIFF(day, ...) | SqlMethods.DateDiffDay(d1, d2) |
| DateDiffMonth | DATEDIFF(month, ...) | ... |
所有運算子皆為延遲執行,至實體化(ToList、foreach)時才發送 SQL。