LINQ query: could not be translated. Either rewrite the query in a form that can be translated ...by inserting a call to 'AsEnumerable'

Viewed 52

I'm experiencing exception thrown by linq query when I have more than two search parameters.

Esception is thrown when querying LocalityId saying:
.LocalityId == __searchValues_LocalityId_1)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'.
First part of StackTrace contains very long and complex SQL query.

Here's my code sample:

private static IQueryable<AdvertisementDTO> SearchByValues(
        SearchOptions<AdvertisementDTO> options,
        IQueryable<AdvertisementDTO> data)      
{
        if (options?.SearchValues == null)
            return data;

        var searchValues = options.SearchValues;
        if (searchValues.PublisherUserId != Guid.Empty)
            data = data.Where(x => x.PublisherUserId.Equals(searchValues.PublisherUserId));
        if (searchValues.CountryId > 0)
            data = data.Where(x => x.CountryId == searchValues.CountryId);
        if (searchValues.LocalityId > 0)
            data = data.Where(x => x.LocalityId == searchValues.LocalityId);
        if (searchValues.SublocalityId > 0)
            data = data.Where(x => x.SublocalityId == searchValues.SublocalityId);
        if (searchValues.AdministrativeAreaLevel_1_Id > 0)
            data = data.Where(x => x.AdministrativeAreaLevel_1_Id.Equals(searchValues.AdministrativeAreaLevel_1_Id));
        if (searchValues.AdministrativeAreaLevel_2_Id > 0)
            data = data.Where(x => x.AdministrativeAreaLevel_2_Id.Equals(searchValues.AdministrativeAreaLevel_2_Id));
        if (searchValues.AdministrativeAreaLevel_3_Id > 0)
            data = data.Where(x => x.AdministrativeAreaLevel_3_Id.Equals(searchValues.AdministrativeAreaLevel_3_Id));
        if (!String.IsNullOrEmpty(searchValues.PostalCode))
            data = data.Where(x => x.PostalCode.Equals(searchValues.PostalCode));

        return data;
    }

I'm I missing something obvious here?

0 Answers
Related