Filtro dei dati (EntityDataSource)
Aggiornamento: novembre 2007
La proprietà Where del controllo EntityDataSource è una stringa che rappresenta una clausola WHERE, che costituisce il predicato di una query Entity SQL. Questa stringa viene passata, senza modifica, a un oggetto ObjectQuery<T> eseguito da Object Services. Questa query rappresenta l'origine dei dati regolati dal controllo EntityDataSource. La stringa fornita alla proprietà Where utilizza lo stesso formato della stringa passata al metodo Where di ObjectQuery<T>. Per ottenere esempi su come utilizzare la clausola WHERE per filtrare una query, vedere Procedura: filtrare dati (Entity Framework).
Passaggio di parametri
Analogamente al metodo Where della classe ObjectQuery<T>, i parametri possono essere passati al predicato assegnato alla proprietà Where. La proprietà WhereParameters del controllo EntityDataSource specifica un oggetto ParameterCollection che contiene i parametri da fornire alla clausola WHERE della query. La proprietà WhereParameters utilizza argomenti denominati per fare riferimento ai parametri specificati nella stringa fornita alla proprietà Where.
Se la proprietà WhereParametersnon è impostata, non viene effettuata alcuna sostituzione di parametri. Tutti i nomi di parametro nella clausola WHERE, che hanno come prefisso il simbolo "@", devono presentare un nome corrispondente nell'oggetto ParameterCollection. I parametri appartenenti a un oggetto ParameterCollection non possono presentare valori null.
Esempio
Il markup XML contenuto nell'esempio riportato di seguito, in un file ASPX, consente di recuperare un valore da un controllo e di passarlo come parametro alla proprietà Where.
<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>
L'esempio XML precedente è equivalente all'oggetto ObjectQuery<T>, seguente denominato onlineOrders:
ObjectQuery<SalesOrderHeader> onlineOrders =
context.SalesOrderHeader
.Where("it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost",
new ObjectParameter("ordercost", orderCost))
.OrderBy("it.TotalDue DESC");
Generazione automatica della clausola WHERE
Quando la proprietà AutoGenerateWhereClause del controllo EntityDataSource è impostata su true, il controllo genera automaticamente una clausola WHERE dai parametri contenuti nell'oggetto ParameterCollection assegnato alla proprietà WhereParameters. In tal modo viene eliminata la necessità di assegnare in modo esplicito una clausola WHERE alla proprietà Where. La costruzione della clausola WHERE dalla proprietà WhereParameters richiede che la proprietà Name di ogni parametro nell'insieme identifichi una singola proprietà dell'elemento restituito dalla query.
Esempio
Nell'esempio riportato di seguito si presuppone che una casella di controllo imposti il flag degli ordini in linea:
<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>
Vedere anche
Concetti
Configurazione del controllo EntityDataSource
Finestra di progettazione EntityDataSource