Il controllo LinqDataSource consente l'utilizzo di LINQ (Language Integrated Query) sfruttando semplice markup per interrogare, aggiungere, modificare o eliminare elmenti di una qualsiasi collezione di oggetti, che utilizzando LINQ to SQL vengono persistiti su un database SQL Server.
In particolare attraverso la proprietà Where è possibile specificare le condizioni da soddisfare per la selezione dalla sorgente dati.
Nel nostro esempio impostando la proprietà AutoGenerateWhereClause a true, la clausola Where è generata dinamicamente in base al contenuto della collezione WhereParameters, concatenando con l'operatore "AND" i vari campi e confrontando i rispettivi valori applicando sempre la condizione di uguaglianza.
In alcuni casi può essere necessario modificare a runtime la clausola Where per escludere uno o più criteri, in modo da estendere la ricerca.
Prendiamo ad esempio un LinqDataSource così configurato:
<asp:LinqDataSource ID="RentListLinqDataSource" runat="server" ContextTypeName="MyDataContext" TableName="Rents" AutoGenerateWhereClause="true" OnSelecting="RentListLinqDataSource_Selecting"> <WhereParameters> <asp:ControlParameter ControlID="RentLocationDropDownList" Name="RentLocationID" PropertyName="SelectedValue" Type="Int32" /> <asp:ControlParameter ControlID="RentTypeDropDownList" Name="RentTypeID" PropertyName="SelectedValue" Type="Int32" /> <asp:ControlParameter ControlID="RifTextBox" Name="Rif" Type="String" /> </WhereParameters> </asp:LinqDataSource>
Per modificare la clausola Where ed i criteri di selezione è sufficente creare un event handler per l'evento Selecting e modificare, rimovendo uno o più parametri dalla collezione WhereParameters, tale collezione che è passata come argomento al metodo mediante LinqDataSourceSelectEventArgs.
Non è necessario fare altro poiché sarà il LinqDataSource a generare la clausola Where in base ai parametri rimasti.
protected void RentListLinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) { // azzero i parametri if (RentLocationDropDownList.SelectedValue == "0" & RentTypeDropDownList.SelectedValue == "0" & string.IsNullOrEmpty(RifTextBox.Text.Trim())) { e.WhereParameters.Clear(); return; } //non è necessario filtrare per il tipo if (RentTypeDropDownList.SelectedValue == "0") { e.WhereParameters.Remove("RentTypeID"); } //non è necessario filtrare per la collocazione if (RentLocationDropDownList.SelectedValue == "0") { e.WhereParameters.Remove("RentLocationID"); } //non è necessario filtrare per il riferiemtno if ( string.IsNullOrEmpty(RifTextBox.Text.Trim())) { e.WhereParameters.Remove("Rif"); } }
Nell'esempio precedete sono rimossi uno o più parametri dalla collezione WhereParameters in base a i valori immessi nell'interfaccia di ricerca, composta da due DropDownList ed una TextBox.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Implementare il throttling in ASP.NET Core
Effettuare il binding di date in Blazor
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Load test di ASP.NET Core con k6
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Short-circuiting della Pipeline in ASP.NET Core