Likeの操作はInに少し似ていますが、方向性が変わりました。 それはどういう意味ですか。 文字列を与え、その文字列を含むフィールドをデータから探します。 つまり、ある文字列は体の一部集合である。 SQL scrip{filter}tはこのように書かれています。
Selec * 表から「%AD%」が好きなところから Selec * テーブルから '%AD' が好きなところから Selec * 私が「AD%」が好きなテーブルから 上の%はワイルドカードで、フィールドに値があることを示し、未知の位置は%に置き換えられます。 一つ目は中央部分がADであり、両端が不明瞭であることを示すものです。 2つ目は最後のADで、前のものは不明瞭です。 逆に三つ目はADで始まり、終わりが不明瞭です。 対応するLinq文は次の通りです:
var q = (cからdb。 顧客 ここでc.CustomerID.Contains("ROUT") Cを選択)。 ToList(); 生成されるSQLは
[t0]を選択してください。 [CustomerID]、[t0]。 [CompanyName]、[t0]。 [ContactName]、[t0]。 [連絡先T itle]、[t0]。 [住所]、[t0]。 [都市]、[t0]。 [地域]、[t0]。 [郵便番号]、[t0]。 [議員 try]、[t0]。 [電話]、[t0]。 [ファックス] [DBO]より。 [お客さん] AS [t0] ここで[t0]。 [顧客ID] 本当に@p0 -- @p0:入力文字列(サイズ=6; プレック = 0; スケール = 0) [%ROUT%] 最後にISSA、ヘッドワイルドカードで締めくくる:
var q = (cからdb。 顧客 ここでc.CustomerID.EndsWith("ISSA") Cを選択)。 ToList(); 生成されるSQLは
[t0]を選択してください。 [CustomerID]、[t0]。 [CompanyName]、[t0]。 [ContactName]、[t0]。 [連絡先T itle]、[t0]。 [住所]、[t0]。 [都市]、[t0]。 [地域]、[t0]。 [郵便番号]、[t0]。 [議員 try]、[t0]。 [電話]、[t0]。 [ファックス] [DBO]より。 [お客さん] AS [t0] ここで[t0]。 [顧客ID] 本当に@p0 -- @p0:入力文字列(サイズ=5; プレック = 0; スケール = 0) [%ISSA] ARO、テールワイルドカードから始めます:
var q = (cからdb。 顧客 ここでc.CustomerID.StartsWith("ARO") Cを選択)。 ToList(); 生成されるSQLは
[t0]を選択してください。 [CustomerID]、[t0]。 [CompanyName]、[t0]。 [ContactName]、[t0]。 [連絡先T itle]、[t0]。 [住所]、[t0]。 [都市]、[t0]。 [地域]、[t0]。 [郵便番号]、[t0]。 [議員 try]、[t0]。 [電話]、[t0]。 [ファックス] [DBO]より。 [お客さん] AS [t0] ここで[t0]。 [顧客ID] 本当に@p0 -- @p0:入力文字列(サイズ=4; プレック = 0; スケール = 0) [ARO%]
Linqはまた、System.Data.Linq.SqlClient名前空間を先に追加する必要があるSqlMethods.Likeというメソッドも提供しています。 上記の3つは次のように書けます
var q = (cからdb。 顧客 ここでSqlMethods.Like(c.CustomerID, "%ROUT%") Cを選択)。 ToList(); ここでは、自分でワイルドカードを入力してLinqにマッチングを伝える必要があります。 たとえば
var q = (cからdb。 顧客 ここで SqlMethods.Like(c.CustomerID, "%ISSA") Cを選択)。 ToList(); 別の例:
var q = (cからdb。 顧客 ここで SqlMethods.Like(c.CustomerID, "ARO%") Cを選択)。 ToList(); SqlMethods.Like の最も素晴らしい点は、自分で定義したワイルドカード式でどこにでもワイルドカードを実装できることです。 たとえば
var q = (cからdb。 顧客 ここでSqlMethods.Like(c.CustomerID, "A%O%T") Cを選択)。 ToList(); 生成されるSQLは
[t0]を選択してください。 [CustomerID]、[t0]。 [CompanyName]、[t0]。 [ContactName]、[t0]。 [連絡先T itle]、[t0]。 [住所]、[t0]。 [都市]、[t0]。 [地域]、[t0]。 [郵便番号]、[t0]。 [議員 try]、[t0]。 [電話]、[t0]。 [ファックス] [DBO]より。 [お客さん] AS [t0] ここで[t0]。 [顧客ID] 本当に@p0 -- @p0:入力文字列(サイズ=5; プレック = 0; スケール = 0) [A%O%T]
最も標準的なのは、Aで始まりTで終わり、中央にOの数値が存在し、それ以外は何も知らないことを知ることです。 これを使って。 SQL Serverは4つのワイルドカードを定義しており、すべてここで利用可能です。 それらは以下の通りです: ワイルドカード文字 Descrip{filter}tion の例 % 0文字以上の文字列。 WHEREのタイトル、例えば「%computer%」は、本のタイトルのどこにでも「computer」という単語が入っているすべての本のタイトルを見つけます。 _(下線)任意の単一の文字。 ここでau_fname「_ean」のような名前は、eanで終わる4文字のファーストネーム(Dean、Seanなど)をすべて見つけます。 [ ] 指定された範囲([a-f])または集合([abcdef])内の任意の単一文字。 ここでau_lname「[C-P]arsen」のようなものは、作者の姓がarsenで終わり、CとPの間の任意の単一の文字で始まる場合、例えばCarsen、Larsen、Karsenなどです。 [^] 指定された範囲([^a-f])または集合([^abcdef])に入らない任意の単一文字。 ここでau_lname 'DE[^l]%' のように、すべての著者の姓はDEで始まり、次の文字がLでない。
%は長さがゼロまたは任意の長さの文字列を表します。 _は文字を示します。 [] は範囲内の文字を示します。 [^] は特定の範囲に属さない文字を示します たとえば:
var q = (cからdb。 顧客 ここで SqlMethods.Like(c.CustomerID, "A_O_T") Cを選択)。 ToList(); _を文字に使うだけです。 生成されるSQLは以下の通りです:
[t0]を選択してください。 [CustomerID]、[t0]。 [CompanyName]、[t0]。 [ContactName]、[t0]。 [連絡先T itle]、[t0]。 [住所]、[t0]。 [都市]、[t0]。 [地域]、[t0]。 [郵便番号]、[t0]。 [議員 try]、[t0]。 [電話]、[t0]。 [ファックス] [DBO]より。 [お客さん] AS [t0] ここで[t0]。 [顧客ID] 本当に@p0 -- @p0:入力文字列(サイズ=5; プレック = 0; スケール = 0) [A_O_T]
Not Likeの場合も非常にシンプルで、ただ意味のないものを加えるだけです。
var q = (cからdb。 顧客 どこ! SqlMethods.Like(c.CustomerID, "A_O_T") Cを選択)。 ToList();
SqlMethods.Like には escape character というパラメータもあり、これは次のような文に変換されます。
ここでのテーブルから列を選択 列 LIKE '%\%%' エスケープ '\' エスケープは、フィールドに%_ [ ]のような特殊文字が含まれており、これらはワイルドカードとして使われます。 そこでEscapeの出番です。 これはSQL Serverの問題です。
|