Поделиться через


Как прямо выполнять запросы SQL (LINQ to SQL)

Обновлен: November 2007

Технология LINQ to SQL преобразует написанные пользователем запросы в параметризованные запросы SQL (в текстовой форме) и отправляет их на сервер SQL для обработки.

В SQL не может выполняться все разнообразие методов, локально доступных вашему приложению; LINQ to SQL стремится преобразовать эти локальные методы в равноценные операторы и функции среды SQL. Для большинства методов и операторов, основанных на встроенных типах .NET Framework, предусмотрены непосредственные преобразования в команды SQL. Некоторые методы и операторы можно создать из доступных функций, а те, которые не могут быть преобразованы, вызывают исключения во время выполнения. Дополнительные сведения см. в разделе Сопоставление типов SQL и CLR (LINQ to SQL).

В тех случаях, когда запроса LINQ to SQL недостаточно для выполнения специализированной задачи, можно использовать метод ExecuteQuery для выполнения запроса SQL и последующего преобразования результата запроса непосредственно в объекты.

Пример

В следующем примере предполагается, что данные для класса Customer распределены по двум таблицам (customer1 и customer2). Запрос возвращает последовательность объектов Customer.

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")
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"
);

Если имена столбцов в табличных результатах соответствуют свойствам столбцов класса сущностей, LINQ to SQL создает объекты вне запроса SQL.

Метод ExecuteQuery также допускает использование параметров. Для выполнения параметризованного запроса используется код, аналогичный представленному ниже.

    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'")
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
    ("SELECT contactname FROM customers WHERE city = {0}",
    "London");

Параметры записываются в тексте запроса с помощью той же нотации с фигурными скобками, которая используется в методах Console.WriteLine() и String.Format(). В действительности в предоставленной пользователем строке запроса вызывается метод String.Format(), который заменяет заключенные в фигурные скобки параметры на созданные имена параметров, такие как @p0, @p1…, @p(n).

См. также

Другие ресурсы

Дополнительные сведения (LINQ to SQL)

Выполнение запросов к базе данных (LINQ to SQL)