Filtern von Daten (EntityDataSource)
Aktualisiert: November 2007
Die Where-Eigenschaft des EntityDataSource-Steuerelements ist eine Zeichenfolge, die eine WHERE-Klausel darstellt, die das Prädikat einer Entity SQL-Abfrage ist. Diese Zeichenfolge wird ohne Änderung an eine ObjectQuery<T> übergeben, die von Object Services ausgeführt wird. Diese Abfrage ist die Quelle der vom EntityDataSource-Steuerelement regulierten Daten. Die an die Where-Eigenschaft übergebene Zeichenfolge verwendet das gleiche Format wie die Zeichenfolge, die an die Where-Methode von ObjectQuery<T> übergeben wurde. Beispiele zum Verwenden der WHERE-Klausel zum Filtern einer Abfrage finden Sie unter Gewusst wie: Filtern von Daten (Entity Framework).
Übergeben von Parametern
Wie die Where-Methode der ObjectQuery<T>-Klasse können Parameter an das Prädikat übergeben werden, das der Where-Eigenschaft zugewiesen ist. Die WhereParameters-Eigenschaft des EntityDataSource-Steuerelements gibt eine ParameterCollection an, die die Parameter enthält, die an die WHERE-Klausel der Abfrage übergeben werden sollen. Die WhereParameters-Eigenschaft verwendet benannte Argumente, um auf die Parameter zu verweisen, die in der an die Where-Eigenschaft übergebenen Zeichenfolge angegeben sind.
Wenn die WhereParameters-Eigenschaft nicht festgelegt wird, wird keine Parameterersetzung vorgenommen. Alle Parameternamen in der WHERE-Klausel mit dem "@"-Symbol, als Präfix müssen über einen übereinstimmenden Namen in der ParameterCollection verfügen. NULL-Werte sind für Parameter in einer ParameterCollection nicht zulässig.
Beispiel
Das XML-Markup im folgenden Beispiel (in einer ASPX-Datei) ruft einen Wert aus einem Steuerelement ab und übergibt ihn als Parameter an die Where-Eigenschaft.
<asp:EntityDataSource ID="SalesOrderHeader"
ConnectionString="name=AdventureWorksEntities"
DefaultContainerName="AdventureWorksEntities" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader"
EntityTypeFilter="" OrderBy="it.TotalDue DESC" Select=""
Where="it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost">
<WhereParameters>
<asp:ControlParameter ControlID="costLimit" DbType="Int32"
DefaultValue="2500" Name="ordercost" PropertyName="Text" />
</WhereParameters>
</asp:EntityDataSource>
Das vorhergehende XML-Beispiel entspricht der folgenden ObjectQuery<T> mit dem Namen onlineOrders:
ObjectQuery<SalesOrderHeader> onlineOrders =
context.SalesOrderHeader
.Where("it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost",
new ObjectParameter("ordercost", orderCost))
.OrderBy("it.TotalDue DESC");
Automatisches Generieren der WHERE-Klausel
Wenn die AutoGenerateWhereClause-Eigenschaft des EntityDataSource-Steuerelements auf true festgelegt ist, generiert das Steuerelement automatisch eine WHERE-Klausel aus den Parametern in der ParameterCollection, die der WhereParameters-Eigenschaft zugewiesen ist. Dadurch ist es nicht mehr erforderlich, der Where-Eigenschaft explizit eine WHERE-Klausel zuzuweisen. Die Erstellung der WHERE-Klausel aus der WhereParameters-Eigenschaft erfordert, dass die Name-Eigenschaft jedes Parameters in der Auflistung eine einzelne Eigenschaft des von der Abfrage zurückgegebenen Elements identifiziert.
Beispiel
Im folgenden Beispiel wird davon ausgegangen, dass ein Kontrollkästchen das Flag für Onlinebestellungen festlegt:
<asp:EntityDataSource ID="SalesOrderHeader"
ConnectionString="name=AdventureWorksEntities"
DefaultContainerName="AdventureWorksEntities" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader"
EntityTypeFilter="" Select="" AutoGenerateWhereClause="True">
<WhereParameters>
<asp:ControlParameter ControlID="onlineOrder" DefaultValue="true"
Name="OnlineOrderFlag" PropertyName="Text" DbType="Boolean" />
</WhereParameters>
</asp:EntityDataSource>
Siehe auch
Konzepte
Konfigurieren des EntityDataSource-Steuerelements