Sdílet prostřednictvím


Postupy: Přímé spuštění dotazů SQL

LINQ to SQL přeloží dotazy, které zapíšete do parametrizovaných dotazů SQL (v textové podobě) a odešle je na SQL Server pro zpracování.

SQL nemůže spustit různé metody, které můžou být pro vaši aplikaci místně dostupné. LINQ to SQL se pokusí tyto místní metody převést na ekvivalentní operace a funkce, které jsou k dispozici v prostředí SQL. Většina metod a operátorů v předdefinovaných typech rozhraní .NET Framework má přímé překlady na příkazy SQL. Některé je možné vytvořit z dostupných funkcí. Ty, které nelze vytvořit, generují výjimky za běhu. Další informace naleznete v tématu SQL-CLR Type Mapping.

V případech, kdy dotaz LINQ to SQL není dostatečný pro specializovanou úlohu, můžete použít ExecuteQuery metodu ke spuštění dotazu SQL a pak převést výsledek dotazu přímo na objekty.

Příklad 1

V následujícím příkladu předpokládejme, že data pro Customer třídu jsou rozložená do dvou tabulek (customer1 a customer2). Dotaz vrátí posloupnost Customer objektů.

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

Pokud názvy sloupců v tabulkových výsledcích odpovídají vlastnostem sloupce vaší třídy entity, vytvoří LINQ to SQL objekty z jakéhokoli dotazu SQL.

Příklad 2

Metoda ExecuteQuery také umožňuje parametry. K provedení parametrizovaného dotazu použijte například následující kód.

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

Parametry jsou vyjádřeny v textu dotazu pomocí stejného zápisu, který Console.WriteLine() používá a String.Format(). Ve skutečnosti se volá na řetězec dotazu, který zadáte, a nahraďte složené závorky parametry vygenerovanými názvy parametrů, String.Format() například @p0, @p1 ..., @p(n).

Viz také