IT_Programming/LINQ

LINQ 에서 T-SQL 의 LIKE 함수처럼 구현하기

JJun ™ 2009. 12. 29. 00:12



 * 출처

 : http://cafe.daum.net/aspdotnet (심재운님 자료)



 

카페의 질문을 보고 LINQ 에서 T-SQL 의 LIKE 함수처럼 구현하는 강좌가 없어서 적어볼까 합니다.

이미 시중에 나온 책에 대부분 포함되어 있어서 그리 새로운 TIP 은 아니지만, 그래도 처음 접하시는분들에게

도움이 되지 않을까 생각이 드네요.

 

이제 슬슬 시작해 보죠.

 

먼저 간단하게 LIKE 가 아닌 조건 만족을 위한 LINQ 구문은 어떤것인지 확인해 보죠.

 

 

SELECT CustomerID, CompanyName, ...
FROM    dbo.Customers
WHERE  City = [London]

 

이는 간단하게 아래와 같이 linq 구문으로 처리 할 수 있지요.

 

 

var query = from c in ctx.Customers

            where c.City == "London"

            select c;

 

그냥 == 조건 기호를 이용해서 처리를 할 수 있습니다.

구문은 많이 sql 쿼리 구문과 친숙하므로 어렵지 않을 겁니다.

보시면 조건 기호가 = 가 아닌 == 로 처리되어 있으니 이 부분만 조심하시면 됩니다.

 

이제 원하시는 like 구문으로 넘어가보죠.

 

SELECT CustomerID, CompanyName, ...
FROM    dbo.Customers
WHERE  City LIKE [Lo%]

 

많이 사용하는 구문이죠? ^^ 이를 linq 에서는 어떻게 이를 처리하는지 확인해 보겠습니다.

 

var query = from c in ctx.Customers

            where c.City.StartsWith("Lo")

            select c;

 

네.~~ StartsWith 함수를 이용해서 처리를 했습니다. 대신 위처럼 [값%] 이런식으로만 처리 가능하지요.

EndsWith 함수도 있어요. StartWith 함수 반대 경우처럼 [%값] 이렇게 처리되겠지요.

 

하지만 %값% 이렇게 많이들 검색하시잖아요.~~ 따라서 이 부분도 함수가 따로 있습니다.

 

var query = from c in ctx.Customers

            where c.City.StartsWith("L") && c.City.Contains("n")

            select c;

 

네~~ Contains 라는 함수가 이를 증명하죠. 위처럼 실행하면 아래와 같은 sql 구문으로 대체됩니다.

 

SELECT CustomerID, CompanyName, ...
FROM    dbo.Customers
WHERE  City LIKE [L%]
AND      City LIKE [%n%]

 

위처럼 간단히 Contains 함수를 이용해서 처리할 수 있지만, System.Data.Linq.SqlClient  네임스페이스를 찾다보면 아래와 같은 함수를 발견하실 거에요. SqlMethods 라는 함수이지요.

 

SQL 구문과 더 흡사한 방법으로 처리하므로 더 좋답니다.

 

var query = from c in ctx.Customers

            whereSqlMethods.Like(c.City, "L_n%")

            select c;

  

당연히..

 

SELECT CustomerID, CompanyName, ...
FROM    dbo.Customers
WHERE  City LIKE [L_n%]

 

이렇게 구문 처리 됩니다.

 

===================================================================================================