この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 20728|答える: 0

[出典] 例えばLinqのファジークエリからSQLへ

[リンクをコピー]
掲載地 2015/09/07 23:16:28 | | |
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の問題です。





先の:ウェブサイトパフォーマンス最適化:キャッシュ制御設定の詳細な説明
次に:ルイジエはいつも何が起きているのかを確信している
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com