J'ai quelque chose comme celui-ci
SecuritySearcher sc = new SecuritySearcher();
Dictionary<string, bool> groupsMap =
sc.GetUserGroupMappings(domainName, currentUser, distGroups.ToList());
IQueryable<HotelTravel> groupq =
(from hotel in qHs
join hp in qHps on hotel.HotelTravelId equals hp.HotelTravelId
where !string.IsNullOrEmpty(hp.GroupName)
&& groupsMap.ContainsKey(hp.GroupName)
&& groupsMap[hp.GroupName] == true
select hotel);
3 Réponses :
Vous n'êtes pas autorisé à utiliser votre dictionnaire dans la clause O quelle que soit la clause de résultat, car Linq to entités tentera de la transformer en SQL et de ne pas savoir comment gérer la collection de dictionnaires. p>
Voir ce lien: Linq to entité framework: Utilisez le dictionnaire dans la requête p>
Afin de traduire votre expression en une requête de base de données, la base de données doit en quelque sorte connaître le contenu de votre dictionnaire et avoir un moyen d'y accéder de la requête. Il n'y a pas de mécanisme de dictionnaire dans SQL, mais cela n'a pas d'importance, car vous n'avez pas besoin d'un dictionnaire, car vous recherchez simplement des clés dont la valeur est une certaine constante. Vous pouvez transformer cet ensemble de clés dans une liste et voir si cette liste contient ce que vous recherchez:
var groupsList = (from kvp in groupsMap // find all keys in groupsMap
where kvp.Value == true // where the value is set to True
select kvp.Key).ToList();
IQueryable<HotelTravel> groupq =
from hotel in qHs
join hp in qHps on hotel.HotelTravelId equals hp.HotelTravelId
where !string.IsNullOrEmpty(hp.GroupName)
&& groupsList.Contains(hp.GroupName)
select hotel;
Bonjour merci pour une lecture rapide mais je reçois cette exception maintenant Linq aux entités ne reconnaît pas la méthode 'System.Collections.Generic.List 1 [System.string] Tolist [String] (System.Collections.Generic.Inédecable < / CODE> 1 [SYSTE M.String]) 'Méthode, et cette méthode ne peut pas être traduite dans une expression de magasin.
Désolé, mais j'aurais dû mettre la liste de la liste dans une déclaration distincte. Vous pouvez voir de ma réponse modifiée comment faire cela maintenant.
@PavanJosyula: Vous devez accepter la réponse si cela vous a aidé.
J'ai eu le même problème. La solution la plus facile consiste à remplacer la méthode avec la méthode avec la même fonctionnalité reconnue par Linq aux entités: p> comme le Répondez ici dit, ces deux Les fonctions font exactement la même chose. em> p> p>
Dupliqué possible de Linq to entité framework: Utilisez le dictionnaire dans la requête
@jrummell: Ce n'est pas un duplicata de la question que vous connaissez car il utilise des dictionnaires d'une manière différente.