У меня есть метод, в котором я фильтрую таблицу и возвращаю те строки, которые соответствуют файлу. Вот метод:Выполнение исключения запроса запроса Linq
public List<RealEstate> GetMatchingRealestatesQuery(RealestateFilter f, RealestateSiteDbContext context)
{
IQueryable<RealEstate> realestates = context.RealEstates.Where(x => x.Status == RealEstateStatus.Open);
realestates = realestates.Where(x => f.Cities.Any(y => x.ZipCode.City.Id == y.Id));
if (f.MaxRent > 0)
realestates = realestates.Where(x => x.Rent <= f.MaxRent);
if (f.MinArea > 0)
realestates = realestates.Where(x => x.Area >= f.MinArea);
if (f.MinRooms > 0)
realestates = realestates.Where(x => x.Rooms <= f.MinRooms);
realestates = realestates.Where(x => f.RealestateTypes.Has(x.Type));
realestates = realestates.Where(x => f.RentalPeriod.Has(x.RentalPeriod));
return realestates.ToList();
}
Однако всякий раз, когда я вызываю метод, я получаю следующее исключение:
Невозможно создать постоянное значение типа «RealestateSiteModel.City». В этом контексте поддерживаются только примитивные типы или типы перечислений.
Я просто строю IQueryable, а затем выполняю запрос, вызывая .ToList. В чем причина этого исключения?
Спасибо за ваш ответ. Я пробовал сравнивать по id города (как показано в обновленном коде в моем ответе), но я все равно получаю такое же исключение. –
Иногда это может помочь фактически взять коллекцию, с которой вы сравниваете, и поместить ее в память: 'var cities = f.Cities.Select (c => c.ZipCode.City.Id) .ToArray();' и затем использовать что в вашем последующем запросе: 'realestates = realestates.Where (x => cities.Any (c => c == x.Id);' –
Это трюк! Хранение идентификатора города города как списка, а не только сами города как список сделали запрос завершенным успешно. Мне кажется странным, что это необходимо. В любом случае, большое спасибо за вашу помощь! –