I have attempted to replicate the Filtering via a lookup here - https://blazor.radzen.com/datafilter
My code uses a Lookup from our Db, not content from the returned query so it's only just slightly different but I cannot get the filtering to work when used with my Lookup. I have replicated the Radzen code whereby the Id is pulled right from the returned data set but when I use my Lookup I get this error.
No generic method 'Contains' on type 'System.Linq.Enumerable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.
For troubleshooting, in my OnSelectedLanguageIdsChange() I added a console.WriteLine and can confirm that the content of selectedLanguageIds are int.
At this point I'm lost...
<RadzenDataFilter @ref="dataFilter" TItem="Entity.Media" Auto=@auto Data="@medias"
FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive" ViewChanged=@(view => filteredMedias = view.ToList())>
<Properties>
<RadzenDataFilterProperty TItem="Entity.Media" Property="Title" Title="Title" />
<RadzenDataFilterProperty TItem="Entity.Media" Property="Id" Title="ID" FilterValue="@selectedIds"
Type="typeof(IEnumerable<int>)" FilterOperator="FilterOperator.Contains">
<FilterTemplate>
<RadzenDropDown @bind-Value=@selectedIds Style="width:100%;"
Change=@OnSelectedIdsChange Data="@(mediaIds)" AllowClear="true" Multiple="true" />
</FilterTemplate>
</RadzenDataFilterProperty>
<RadzenDataFilterProperty TItem="Entity.Media" Property="languageId" Title="Language" FilterValue="@selectedLanguageIds"
Type="typeof(IEnumerable<int>)" FilterOperator="FilterOperator.Contains">
<FilterTemplate>
<RadzenDropDown @bind-Value=@selectedLanguageIds Style="width:100%;"
Change=@OnSelectedLanguageIdsChange AllowClear="true"
Data=@_languages Multiple=true TValue="IEnumerable<int>"
TextProperty="Name"
ValueProperty="Id" />
</FilterTemplate>
</RadzenDataFilterProperty>
</Properties>
<RadzenDataGrid @ref="mediasGrid" AllowPaging="true" AllowSorting="true" Data="@(filteredMedias ?? medias)" TItem="Entity.Media"
ColumnWidth="200px" PageSize="20" Style="height: 500px">
<Columns>
<RadzenDataGridColumn Width="5%" TItem="Entity.Media" Title="#" Filterable="false" Sortable="false" TextAlign="TextAlign.Center" Frozen=true>
<Template>
@(medias.IndexOf(context) + 1)
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Entity.Media" Property="Title" Title="Title" Width="25%" Visible="true" />
<RadzenDataGridColumn TItem="Entity.Media" Property="LanguageId" Title="Language" Width="15%" Visible="true" />
</Columns>
@code {
bool auto = true;
readonly MediaSearchViewModel _model = new();
RadzenDataFilter<Entity.Media> dataFilter;
IList<Entity.Media> filteredMedias;
IList<Entity.Media> medias;
RadzenDataGrid<Entity.Media> mediasGrid;
IEnumerable<LookupModel> _languages;
IEnumerable<int> selectedLanguageIds;
IEnumerable<int> selectedIds;
IEnumerable<int> mediaIds;
protected override async Task OnInitializedAsync()
{
await Lookups();
medias = await MediaService.SearchFiltered();
mediaIds = medias.Select(o => o.Id).Distinct();
}
private async Task Lookups()
{
_languages = await LanguageService.Lookup();
}
#region Filters
void OnSelectedLanguageIdsChange(object value)
{
if (selectedLanguageIds != null && !selectedLanguageIds.Any())
{
selectedLanguageIds = null;
}
foreach (var item in selectedLanguageIds)
{
Console.WriteLine(item);
}
}
void OnSelectedIdsChange(object value)
{
if (selectedIds != null && !selectedIds.Any())
{
selectedIds = null;
}
}
#endregion
}