방법: SQL 쿼리 직접 실행
LINQ to SQL을 작성한 쿼리를 텍스트 형식의 매개 변수가 있는 SQL 쿼리로 변환하고 SQL 서버에 전달하여 처리합니다.
SQL에서는 애플리케이션에서 로컬로 사용할 수 있는 다양한 메서드를 실행할 수 없습니다. LINQ to SQL에서 이러한 로컬 메서드를 해당 작업과 SQL 환경 내부에서 사용 가능한 함수로 변환하려 합니다. .NET Framework 기본 제공 형식의 대부분의 메서드와 연산자는 SQL 명령으로 직접 변환됩니다. 일부는 사용할 수 있는 함수에서 생성될 수 있습니다. 생성될 수 없는 일부는 런타임 예외를 발생시킵니다. 자세한 내용은 SQL-CLR 형식 매핑을 참조하세요.
LINQ to SQL 쿼리가 부족하여 특수한 작업을 수행할 수 없는 경우 ExecuteQuery 메서드를 사용하여 SQL 쿼리를 실행하고 쿼리의 결과를 직접 개체로 변환합니다.
예 1
다음 예제에서는 Customer
클래스의 데이터가 두 개의 테이블(customer1 및 customer2)에 나누어져 있다고 가정합니다. 쿼리는 Customer
개체의 시퀀스를 반환합니다.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
(@"SELECT c1.custid as CustomerID, c2.custName as ContactName
FROM customer1 as c1, customer2 as c2
WHERE c1.custid = c2.custid"
);
Dim db As New Northwnd("c:\northwnd.mdf")
Dim results As IEnumerable(Of Customer) = _
db.ExecuteQuery(Of Customer) _
("SELECT c1.custID as CustomerID," & _
"c2.custName as ContactName" & _
"FROM customer1 AS c1, customer2 as c2" & _
"WHERE c1.custid = c2.custid")
테이블 형식 결과의 열 이름이 엔터티 클래스의 열 속성과 일치하는 한 LINQ to SQL은 SQL 쿼리에서 개체를 만듭니다.
예제 2
또한 ExecuteQuery 메서드는 매개 변수를 허용합니다. 다음의 코드를 사용하여 매개 변수가 있는 쿼리를 실행합니다.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
("SELECT contactname FROM customers WHERE city = {0}",
"London");
Dim db As New Northwnd("c:\northwnd.mdf")
Dim results As IEnumerable(Of Customer) = _
db.ExecuteQuery(Of Customer) _
("SELECT contactname FROM customers WHERE city = {0}, 'London'")
매개 변수는 Console.WriteLine()
및 String.Format()
에서 사용되는 동일한 중괄호 표기법을 사용하여 쿼리 텍스트에서 표현됩니다. 즉 String.Format()
은 제공된 쿼리 문자열에 대해 실제로 호출되어 중괄호로 묶인 매개 변수를 @p0, @p1 …, @p(n) 등과 같은 생성된 매개 변수 이름으로 대체합니다.