15 votes

Entity Framework : Impossible de créer une valeur constante de type 'System.Collections.Generic.IList`1'.

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)))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X