ToList()/ToArray() 緩存結果var q = from c in db.Customers
select c.ContactName;
// 多字段
select new { c.ContactName, c.Phone };
// 字段重命名 + 運算
select new {
Name = e.FirstName + " " + e.LastName,
Phone = e.HomePhone
};
// 計算字段
select new {
p.ProductID,
HalfPrice = p.UnitPrice / 2
};
編譯器自動生成匿名類,屬性名可自定義。
select new {
p.ProductName,
Availability = p.UnitsInStock - p.UnitsOnOrder < 0 ? "Out Of Stock" : "In Stock"
};
select new Name {
FirstName = e.FirstName,
LastName = e.LastName
};
from c in db.Customers
where c.City == "London"
select c.ContactName;
select new {
c.CustomerID,
CompanyInfo = new { c.CompanyName, c.City, c.Country },
ContactInfo = new { c.ContactName, c.ContactTitle }
};
from o in db.Orders
select new {
o.OrderID,
DiscountedProducts = from od in o.OrderDetails
where od.Discount > 0
select od,
FreeShippingDiscount = o.Freight
};
var q = from c in db.Customers
where c.Country == "UK" || c.Country == "USA"
select new {
c.CustomerID,
c.CompanyName,
Phone = c.Phone,
InternationalPhone = PhoneNumberConverter(c.Country, c.Phone)
};
⚠️ **LINQ to SQL 無法將本地方法翻譯為 SQL**,需先 ToList() 拉取到內存再調用。
var q = (from c in db.Customers
select c.City).Distinct();
生成 SQL:SELECT DISTINCT [City] FROM [Customers]。
var d = new { Name = "s" } ✓ 屬性名顯式var d = new { "s" } ✗ 編譯錯誤 (無屬性名)string c = "d"; var d = new { c } ✓ 隱式屬性名 = 變量名new { Phone = c.HomePhone }var q = db.Customers.Select(c => c.City); // 未執行
var list = q.ToList(); // 此處執行 SQL
var arr = q.ToArray(); // 再次執行 SQL!
需緩存結果避免重複查詢。