이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 20728|회답: 0

[출처] Linq에서 SQL로 퍼지 쿼리를 만드는 것과 비슷합니다

[링크 복사]
게시됨 2015. 9. 7. 오후 11:16:28 | | |
Like의 작동 방식은 In과 비슷하지만, 방향이 바뀌었습니다. 무슨 뜻인가요? 문자열을 주고 그 문자열을 포함하는 필드를 찾으세요. 즉, 주어진 문자열은 체의 부분집합이다. SQL scrip{filter}t는 이렇게 작성되어 있습니다.


Selec * 표에서 '%AD%'를 좋아합니다
Selec * 표에서 '%AD'를 좋아합니다
Selec * 제가 'AD%'를 좋아하는 테이블에서
위의 %는 와일드카드로, 필드에 값을 포함하고 있음을 나타내며, 알 수 없는 위치는 %로 대체됩니다. 첫 번째는 중간 부분이 AD임을 나타내며, 양 끝이 불분명함을 나타냅니다. 두 번째는 마지막에 있는 AD이고, 이전 것은 명확하지 않습니다. 반면 세 번째는 AD로 시작해 불분명하게 끝난다. 대응하는 Linq 명제는 다음과 같습니다:


var q = (c에서 db. 고객
여기서 c.CustomerID.Contains("ROUT")
C를 선택하세요). ToList();
생성되는 SQL은


[t0]을 선택하세요. [고객 ID], [t0]. [회사명], [t0]. [연락처 이름], [t0]. [연락처
itle], [t0]. [주소], [t0]. [도시], [t0]. [지역], [t0]. [우편번호], [t0]. [의원
try], [t0]. [전화], [t0]. [팩스]
[dbo]에서 왔습니다. [손님들] AS [t0]
여기서 [t0]. [고객 ID] 정말 @p0
-- @p0: 입력 문자열 (크기 = 6; Prec = 0; 스케일 = 0) [%ROUT%]
ISSA로 마무리하며, 헤드 와일드카드:


var q = (c에서 db. 고객
여기서 c.CustomerID.EndsWith("ISSA")
C를 선택하세요). ToList();
생성되는 SQL은


[t0]을 선택하세요. [고객 ID], [t0]. [회사명], [t0]. [연락처 이름], [t0]. [연락처
itle], [t0]. [주소], [t0]. [도시], [t0]. [지역], [t0]. [우편번호], [t0]. [의원
try], [t0]. [전화], [t0]. [팩스]
[dbo]에서 왔습니다. [손님들] AS [t0]
여기서 [t0]. [고객 ID] 정말 @p0
-- @p0: 입력 문자열 (크기 = 5; Prec = 0; 척도 = 0) [%ISSA]
ARO, 꼬리 와일드카드부터 시작해서:


var q = (c에서 db. 고객
여기서 c.CustomerID.StartsWith("ARO")
C를 선택하세요). ToList();
생성되는 SQL은


[t0]을 선택하세요. [고객 ID], [t0]. [회사명], [t0]. [연락처 이름], [t0]. [연락처
itle], [t0]. [주소], [t0]. [도시], [t0]. [지역], [t0]. [우편번호], [t0]. [의원
try], [t0]. [전화], [t0]. [팩스]
[dbo]에서 왔습니다. [손님들] AS [t0]
여기서 [t0]. [고객 ID] 정말 @p0
-- @p0: 입력 문자열 (크기 = 4; Prec = 0; 스케일 = 0) [ARO%]

Linq는 또한 System.Data.Linq.SqlClient 네임스페이스를 먼저 추가해야 하는 SqlMethods.Like라는 메서드를 제공합니다. 위의 세 가지는 다음과 같이 쓸 수 있습니다


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]을 선택하세요. [고객 ID], [t0]. [회사명], [t0]. [연락처 이름], [t0]. [연락처
itle], [t0]. [주소], [t0]. [도시], [t0]. [지역], [t0]. [우편번호], [t0]. [의원
try], [t0]. [전화], [t0]. [팩스]
[dbo]에서 왔습니다. [손님들] AS [t0]
여기서 [t0]. [고객 ID] 정말 @p0
-- @p0: 입력 문자열 (크기 = 5; Prec = 0; 스케일 = 0) [A%O%T]

가장 일반적인 것은 A로 시작해서 T로 끝나고, 중간에 O라는 값만 알고 있고, 그 외에는 아무것도 모른다는 것을 아는 것입니다. 이거 써.
SQL Server는 네 개의 와일드카드를 정의하며, 모두 여기에서 확인할 수 있습니다. 이들은 다음과 같습니다:
와일드카드 문자 Descrip{filter}tion 예시
% 0자 이상의 문자열. WHERE 제목 LIKE '%computer%'는 책 제목 어디에나 'computer'라는 단어가 들어간 모든 책 제목을 찾아냅니다.
_ (밑줄) 어떤 한 글자든 상관없어요. 여기서 '_ean' 같은 au_fname 'Ean'으로 끝나는 네 글자 이름(Dean, Sean 등)을 모두 찾을 수 있습니다.
[ ] 지정된 범위([a-f]) 또는 집합([abcdef]) 내의 단일 문자 모두 포함됩니다. 여기서 '[C-P]arsen' 같은 au_lname arsen으로 끝나고 C와 P 사이의 단일 문자로 시작하는 작가의 성을 발견합니다. 예를 들어 Carsen, Larsen, Karsen 등이 있습니다.
[^] 지정된 범위([^a-f]) 또는 집합([^abcdef]) 내에 있지 않은 단일 문자를 사용할 수 있습니다. 여기서 au_lname 'DE[^l]%'와 같은 모든 저자의 성을 DE로 시작하며 다음 글자가 L이 아닌 경우를 나타냅니다.

%는 길이가 0이거나 임의의 길이인 문자열을 나타냅니다. _는 문자를 나타냅니다. []는 범위 내에 있는 문자를 나타냅니다. [^]는 특정 범위에 속하지 않는 문자를 나타낸다
예를 들면:


var q = (c에서 db. 고객
여기서 SqlMethods.Like(c.CustomerID, "A_O_T")
C를 선택하세요). ToList();
_로 캐릭터를 나타내면 됩니다. 생성된 SQL은 다음과 같습니다:


[t0]을 선택하세요. [고객 ID], [t0]. [회사명], [t0]. [연락처 이름], [t0]. [연락처
itle], [t0]. [주소], [t0]. [도시], [t0]. [지역], [t0]. [우편번호], [t0]. [의원
try], [t0]. [전화], [t0]. [팩스]
[dbo]에서 왔습니다. [손님들] AS [t0]
여기서 [t0]. [고객 ID] 정말 @p0
-- @p0: 입력 문자열 (크기 = 5; Prec = 0; 스케일 = 0) [A_O_T]

Not Like도 아주 간단해요, 그냥 쓸데없는 말만 추가하면 돼요.


var q = (c에서 db. 고객
어디! SqlMethods.Like(c.CustomerID, "A_O_T")
C를 선택하세요). ToList();

SqlMethods.Like 에는 escape 문자라는 매개변수도 있는데, 이는 다음과 같은 문장으로 변환됩니다.


테이블에서 열을 선택하세요.
열: LIKE '%\%%' 이스케이프 '\'
이스케이프는 필드에 %_ [ ]와 같은 특수 문자가 포함되어 있는데, 이들은 와일드카드로 사용됩니다. 바로 이스케이프가 등장하는 부분입니다. 이건 SQL Server 관련 문제입니다.





이전의:웹사이트 성능 최적화: 캐시 제어 설정에 대한 상세한 설명
다음:루이제는 항상 무슨 일이 일어나고 있는지 확신이 있었다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com