You have a collection of objects. You want a subset of that collection. Instead of making another SQL call to the database or using programming code to create a filtered subset of your original collection, you can accomplish this simply by using LINQ.
The following scenario has already a GridView full of address data. I placed a radiobuttonlist control below the grid that allows a user to select ‘ALL’ or ‘FL’ (Florida). When the user clicks ‘FL’, I want to display in the GridView a subset of the original collection that contains addresses that pertain to Florida only.
The following event for the RadioButtonList demonstrates creating the filtered subset by using LINQ.
Protected Sub RadioButtonList1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles RadioButtonList1.SelectedIndexChanged mNameAddressCollection = ViewState("DataSource") If IsNothing(mNameAddressCollection) = True Then Exit Sub End If Try If RadioButtonList1.SelectedValue.ToUpper = "ALL" Then GridView1.DataSource = mNameAddressCollection GridView1.DataBind() Else Dim newCollection = (From m As clsNameAddress In mNameAddressCollection Where m.State.ToUpper = "FL" Select m) GridView1.DataSource = newCollection.Cast(Of clsNameAddress).ToList End If GridView1.DataBind() txtRecordCount.Text = GridView1.DataSource.count Catch ex As Exception mLogger.Error(ex.Message) End Try End Sub
The actual line of LINQ code from the event above:
Dim newCollection = (From m As clsNameAddress In mNameAddressCollection Where m.State.ToUpper = “FL” Select m)
You then need to cast the new collection and assign it to the datasource of the GridView:
GridView1.DataSource = newCollection.Cast(Of clsNameAddress).ToList