0

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

}

Tim Cadieux
  • 447
  • 9
  • 21

0 Answers0