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?