掌握將 IQueryable 轉換為客戶端集合的關鍵運算子,解決伺服器端無法轉譯的邏輯(如自訂方法呼叫)。
var q = from p in db.Products.AsEnumerable()
where IsValidProduct(p) // 客戶端方法,無法轉 SQL
select p;
強制後續運算子使用 Enumerable 而非 Queryable 實作,在記憶體中執行篩選。
var q = from c in db.Customers where c.City == "London" select c;
Customer[] qArray = q.ToArray(); // 立即執行查詢
var q = from e in db.Employees where e.HireDate >= new DateTime(1994,1,1) select e;
List<Employee> qList = q.ToList();
var q = from p in db.Products
where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued
select p;
Dictionary<int, Product> qDictionary = q.ToDictionary(p => p.ProductID);
foreach (int key in qDictionary.Keys) Console.WriteLine(key);
| 運算子 | 回傳型別 | 適用場景 |
|---|---|---|
| AsEnumerable | IEnumerable<T> | 需混合伺服器/客戶端邏輯,延遲執行 |
| ToArray | T[] | 固定大小、高效能索引存取 |
| ToList | List<T> | 需增刪改、最通用 |
| ToDictionary | Dictionary<TKey,T> | 鍵值查找、去重複 |