Cela m'a causé des problèmes sans fin aujourd'hui. J'ai cette simple requête
var result =
DataContext.Accommodations.Where(a =>
(criteria.MinPrice == null || a.AccommodationRates.Any(r => r.From >= criteria.MinPrice)) &&
(criteria.MaxPrice == null || a.AccommodationRates.Any(r => r.To <= criteria.MaxPrice)) &&
(criteria.Locations == null || criteria.Locations.Count == 0 || a.AccommodationPlaceJoins.Any(j => criteria.Locations.Contains(j.Place.PlaceName)))
);
La dernière ligne de cette requête me pose problème.
(criteria.Locations == null ||
criteria.Locations.Count == 0 ||
a.AccommodationPlaceJoins.Any(j => criteria.Locations.Contains(j.Place.PlaceName)))
L'erreur qu'il donne est
Impossible de créer une valeur constante de type System.Collections.Generic.IList`1'. Seuls les types primitifs ('tels que Int32, String, and Guid') sont supportés dans ce contexte.
Je n'essaie même pas de créer une liste. Tout ce que j'essaie de faire ici est de ramener les hébergements qui sont associés à un lieu (où le nom du lieu dans la table Place qui est liée à la table Accommodation via la table AccommodationPlaceJoin) est égal à l'un des noms de lieux dans criteria.Locations (qui est de type IList).
J'ai essayé de remplacer cette ligne par celle-ci, mais ça n'a pas marché.
(criteria.Locations == null ||
criteria.Locations.Count == 0 ||
a.AccommodationPlaceJoins.Any(j => criteria.Locations.Any(l => l == j.Place.PlaceName)))