Verwenden von LINQ mit ASP.NET
Aktualisiert: November 2007
Sie können die sprachintegrierte Abfrage (Language-Integrated Query, LINQ) auf Webseiten verwenden, um Daten abzurufen und zu ändern. LINQ wendet die Prinzipien der objektorientierten Programmierung auf relationale Daten an. Dabei wird ein einheitliches Programmiermodell zum Abfragen von Daten aus verschiedenen Typen von Datenquellen bereitgestellt, und die Datenfunktionen werden direkt auf die Sprachen C# und Visual Basic erweitert. Weitere Informationen finden Sie unter Sprachintegrierte Abfrage (Language-Integrated Query, LINQ).
Sie können LINQ über das LinqDataSource-Steuerelement, das ObjectDataSource-Steuerelement oder über das Erstellen von LINQ-Abfragen verwenden.
Wenn Sie LINQ in einer Webanwendung verwenden, müssen Sie die Richtliniendateien aus Gründen der Codezugriffssicherheit ggf. ändern. Diese Änderungen sind weiter unten in diesem Thema beschrieben.
LinqDataSource-Steuerelement
Mithilfe des LinqDataSource-Steuerelements können Sie aus einer Datenbank auf einfache Weise auf Daten oder auf eine speicherinterne Datenauflistung zugreifen, z. B. ein Array. Sie können alle Bedingungen deklarieren, die für häufige Szenarien wie das Abrufen, Filtern, Sortieren und Gruppieren von Daten erforderlich sind. Das Steuerelement erstellt die LINQ-Abfragen dynamisch aus den Werten, die Sie deklarativ bereitstellen.
Beim Abrufen von Daten aus einer LINQ to SQL-Datenkontextklasse können Sie auch ein LinqDataSource-Steuerelement zum Aktualisieren, Einfügen und Löschen von Vorgängen konfigurieren. Das Steuerelement ermöglicht dies, ohne dass Sie die SQL-Befehle zum Durchführen dieser Aufgaben selbst schreiben müssen.
Um die Daten auf einer Webseite anzuzeigen, binden Sie ein datengebundenes Steuerelement an das LinqDataSource-Steuerelement. Beispiele für datengebundene Steuerelemente sind GridView oder DetailsView.
Das folgende Beispiel zeigt das Markup für ein LinqDataSource-Steuerelement, das eine Verbindung zur Datenbank AdventureWorks herstellt. Es werden Datensätze aus der Tabelle Contact zurückgegeben, deren Wert in der EmailPromotion-Eigenschaft 1 entspricht.
<asp:LinqDataSource
ContextTypeName="AdventureWorksDataContext"
TableName="Contacts"
Where="EmailPromotion=1"
ID="LinqDataSource1"
runat="server">
</asp:LinqDataSource>
Weitere Informationen finden Sie unter Übersicht über das LinqDataSource-Webserversteuerelement.
ObjectDataSource-Steuerelement
Sie verwenden das ObjectDataSource-Steuerelement, wenn Sie mit den Daten auf komplexere Art interagieren möchten, als dies mit dem LinqDataSource-Steuerelement möglich ist. Sie können z. B. eine Aktualisierungsmethode erstellen, die auch das Festlegen von Werten in verknüpften Tabellen durchführt.
Sie können das ObjectDataSource-Steuerelement mit einer LINQ to SQL-Klasse verwenden. Legen Sie dazu die TypeName-Eigenschaft auf den Namen der Datenkontextklasse fest. Legen Sie außerdem die Methoden SelectMethod, UpdateMethod, InsertMethod und DeleteMethod auf die Methoden in der Datenkontextklasse fest, die die entsprechenden Vorgänge ausführen.
Wenn Sie für das ObjectDataSource-Steuerelement die verzögerte Ausführung von Abfragen verwenden, müssen Sie einen Ereignishandler für das ObjectDisposing-Ereignis erstellen, um das Freigeben der Datenkontextklasse abzubrechen. Dieser Schritt ist erforderlich, da LINQ to SQL die verzögerte Ausführung unterstützt, während das ObjectDataSource-Steuerelement versucht, den Datenkontext nach dem Auswahlvorgang freizugeben.
LINQ-Abfragen
Sie können LINQ-Abfragen in eine Webseite einbinden, ohne das Datenquellensteuerelement zu verwenden. Sie können eine LINQ-Abfrage verwenden, wenn Sie einen Abfrageoperator benötigen, der im LinqDataSource-Steuerelement nicht verfügbar ist. Sie können die Abfrage auch verwenden, wenn Sie schreibgeschützte Daten in einem datengebundenen Steuerelement ohne den Verarbeitungsaufwand anzeigen möchten, der zum Erstellen eines Datenquellensteuerelements erforderlich ist. Weitere Informationen zu LINQ-Operatoren finden Sie unter Übersicht über Standardabfrageoperatoren. Eine Liste der Abfrageoperatoren, die im LinqDataSource-Steuerelement verfügbar sind, finden Sie unter Übersicht über das LinqDataSource-Webserversteuerelement.
Das folgende Beispiel zeigt, wie Sie eine LINQ-Abfrage in eine Webseite einbinden. Das Beispiel zeigt die Ergebnisse der Abfrage in einem GridView-Steuerelement an.
[Visual Basic]
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim dataContext As AdventureWorksDataContext = _
New AdventureWorksDataContext()
Dim query = From contact In dataContext.Contacts _
Where contact.EmailPromotion = 1 _
Select contact
GridView1.DataSource = query
GridView1.DataBind()
End If
End Sub
[C#]
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AdventureWorksDataContext dataContext =
new AdventureWorksDataContext();
var query = from contact in dataContext.Contacts
where contact.EmailPromotion==1
select contact;
GridView1.DataSource = query;
GridView1.DataBind();
}
}
LINQ und Codezugriffssicherheit
Die folgenden Abschnitte enthalten Informationen dazu, wie Sie LINQ bei mittlerer und hoher Vertrauensebene verwenden.
Verwenden von LINQ bei mittlerer Vertrauensebene
Um LINQ in einer Webanwendung zu verwenden, die mit mittlerer Vertrauensebene ausgeführt wird, müssen Sie zwei Elemente in die Richtliniendatei einfügen, die für die Medium-Vertrauensebene definiert ist. Standardmäßig ist die Datei web_mediumtrust.config die Richtliniendatei für die mittlere Vertrauensebene.
Fügen Sie im SecurityClasses-Element ein SecurityClass-Element mit den folgenden Attributen ein:
<SecurityClass
Name="ReflectionPermission"
Description="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
Fügen Sie im PermissionSet-Element, für das das Name-Attribut auf "ASP.Net" gesetzt ist, ein IPermission-Element hinzu, das über die folgenden Attribute verfügt:
<IPermission
class="ReflectionPermission"
version="1"
Flags="RestrictedMemberAccess"
/>
Hinweis: |
---|
Die Elemente können ggf. während des Installationsprozesses hinzugefügt worden sein. |
Verwenden von LINQ bei hoher Vertrauensebene
Um LINQ in einer Webanwendung zu verwenden, die mit hoher Vertrauensebene ausgeführt wird, müssen Sie ein Element in die Richtliniendatei einfügen, die für die High-Vertrauensebene definiert ist. Standardmäßig ist die Datei web_hightrust.config die Richtliniendatei für die hohe Vertrauensebene. Diese Datei enthält bereits ein IPermission-Element innerhalb eines PermissionsSet-Elements, das auf die ReflectionPermission-Klasse verweist. Sie müssen dieses Element ändern, wenn Sie LINQ verwenden.
Suchen Sie im PermissionSet-Element, für das das Name-Attribut auf "ASP.Net" gesetzt ist, nach dem IPermission-Element für ReflectionPermission, und legen Sie es wie folgt fest:
<IPermission
class="ReflectionPermission"
version="1"
Flags="ReflectionEmit, RestrictedMemberAccess"
/>
Hinweis: |
---|
Dieses Element kann ggf. während des Installationsprozesses geändert worden sein. |
Siehe auch
Konzepte
Übersicht über das LinqDataSource-Webserversteuerelement