Contains 方法查詢客戶 ID 在指定集合內的訂單:
string[] customerID_Set = { "AROUT", "BOLID", "FISSA" };
var q = (from o in db.Orders
where customerID_Set.Contains(o.CustomerID)
select o).ToList();
生成 SQL:
WHERE [t0].[CustomerID] IN (@p0, @p1, @p2)
-- @p0: 'AROUT', @p1: 'BOLID', @p2: 'FISSA'
也可內建陣列:
where (new string[] { "AROUT", "BOLID", "FISSA" }).Contains(o.CustomerID)
NOT IN:加邏輯非 ! 即可:
where !(new string[] { "AROUT", "BOLID", "FISSA" }).Contains(o.CustomerID)
Contains、StartsWith、EndsWith對應 SQL LIKE 的三種基本模式:
| SQL | LINQ 方法 | 範例 |
|---|---|---|
WHERE id LIKE '%AD%' | Contains("AD") | 包含 "AD" |
WHERE id LIKE '%AD' | EndsWith("AD") | 以 "AD" 結尾 |
WHERE id LIKE 'AD%' | StartsWith("AD") | 以 "AD" 開頭 |
var q = (from c in db.Customers
where c.CustomerID.Contains("ROUT")
select c).ToList();
生成 SQL:WHERE [t0].[CustomerID] LIKE @p0 -- @p0: '%ROUT%'
where c.CustomerID.EndsWith("ISSA") -- LIKE '%ISSA'
where c.CustomerID.StartsWith("ARO") -- LIKE 'ARO%'
SqlMethods.Like 支援任意通配符位置需引用 System.Data.Linq.SqlClient。可自訂通配符模式:
where SqlMethods.Like(c.CustomerID, "%ROUT%") // 等同 Contains
where SqlMethods.Like(c.CustomerID, "%ISSA") // 等同 EndsWith
where SqlMethods.Like(c.CustomerID, "ARO%") // 等同 StartsWith
where SqlMethods.Like(c.CustomerID, "A%O%T") // 開頭 A、中間有 O、結尾 T
where SqlMethods.Like(c.CustomerID, "A_O_T") // _ 代表單一字元
支援 SQL Server 四種通配符:
%:零或多個字元_:單一字元[範圍]:如 [a-f]、[abcdef][^範圍]:排除範圍內字元
where !SqlMethods.Like(c.CustomerID, "A_O_T")
若欄位值本身含通配符,可指定跳脫字元:
SqlMethods.Like(c.CustomerID, pattern, escapeChar)
對應 SQL:LIKE pattern ESCAPE escapeChar。