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 관련 문제입니다.
|